作者:myq9395014 | 来源:互联网 | 2024-11-10 13:37
在C#编程中,设计流畅的用户界面是一项重要的任务。本文分享了实现Fluent界面设计的技巧与方法,特别是通过编写领域特定语言(DSL)来简化字符串操作。我们探讨了如何在不使用`+`符号的情况下,通过方法链式调用来组合字符串,从而提高代码的可读性和维护性。文章还介绍了如何利用静态方法和扩展方法来实现这一目标,并提供了一些实用的示例代码。
设计Fluent界面方法
我正在尝试编写DSL
我有返回字符串的方法,但如果我想组合字符串,我需要使用+符号,但我想一起调用这些方法,但我不确定如何实现它
我现在有方法如
MyStaticClass.Root() MyStaticClass.And() MyStaticClass.AnyInt()
返回字符串的MyStaticClass.Root() MyStaticClass.And() MyStaticClass.AnyInt()
我希望能够做到
Root().And().AnyInt()
导致字符串
这些方法应该返回一个包装类。 这些方法也是包装类的实例方法 。 例:
class Fluent { private string _value; public Fluent And() { this._value += "whatever"; return this; } public Fluent AnyInt() { this._value += "42"; return this; } public override string ToString() { return _value; } }
您还可以定义从Fluent
到string的隐式或显式转换,而不是(或除了) ToString()
覆盖。
此外,对于生产代码,我使用字符串生成器来避免对Concat
多次调用。
您不需要使用+符号。 使用StringBuilder
http://msdn.microsoft.com/en-us/library/system.text.stringbuilder.aspx
例
StringBuilder builder = new StringBuilder(); builder.Append("One string ").Append("Second string").Append("Another string"); string final = builder.ToString();
如果您想要一个简单的自定义FluentInterface,请使用以下命令:
public class MyOwnStringBuilder { public StringBuilder Builder; public MyOwnStringBuilder() { this.Builder = new StringBuilder(); } public static MyOwnStringBuilder Root { get{return new MyOwnStringBuilder();} } public string End { get{return Builder.ToString();} } public MyOwnStringBuilder And(string value) { Builder.Append(value); return this; } public MyOwnStringBuilder AnyInt(string value) { Builder.Append(value); return this; } }
你会用它:
MyOwnStringBuilder.Root .And("some value") .AnyInt("some new value") .End;
问候。
上述就是C#学习教程:设计Fluent界面方法分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—编程笔记