使用字符串类,我们可以像这样一个接一个地调用方法:
originalString.TrimStart().TrimEnd().Replace("Hello","Hi")
我想知道它是如何运作的?这种操作在.net框架中调用了什么。
如果你能给我一个例子来创建这样的课程,我将不胜感激。
谢谢,
答案 0 :(得分:6)
这个方法的每一个都返回新的字符串,所以基本上这是在字符串返回字符串上调用的方法。您可以创建自己的类,创建方法并像这样运行它。
非常重要的是要注意字符串是不可变的,所以要求例如字符串上的Trim
不会改变它。
public string Trim()
{
return this.TrimHelper(2);
}
这就是Trim
的样子,没有神奇的简单方法。
如果你的类不是不可变的最好的方法是为你的类创建扩展方法。您可以阅读有关扩展方法here的更多信息。
使用常规方法的示例
public class Test
{
public int Prop {get;set;}
public Test DoStuf()
{
Prop=1;
return this;
}
public Test DoOtherStuff()
{
return new Test();
}
}
并使用它:
var test = new Test();
test.DoStuff().DoOtherStuff();
答案 1 :(得分:6)
这没什么特别的。 string
类的许多方法都返回一个字符串,因此您可以在返回的值上调用其他方法。
例如TrimStart()
返回一个新字符串,其中空格在开始时被剥离。然后在返回的字符串上调用TrimEnd()
。
答案 2 :(得分:1)
所有上述方法都返回字符串。所以这只是一种类型问题。
你可以像这样创建自己的类 -
课程定义
public class FooString
{
public FooString Test1()
{
return this;
}
public FooString Test2()
{
return this;
}
public FooString Test3(string someString)
{
return this;
}
}
方法调用
FooString test = new FooString();
test.Test1().Test2().Test3("Some string");
答案 3 :(得分:1)
您所看到的主要内容称为Method Chaining(或者也是一个流畅的界面)。
它的工作原理是因为该方法返回与其包含类型相同的类型(即TrimStart是String类的函数,并且还返回String)。但是,这不仅限于字符串。
我能想到的最好的现代例子之一是jQuery(维基百科文章中提到过)。
答案 4 :(得分:0)
很简单。 String是一个不可变类。这意味着您在其上执行的每个操作都会转换其值,并且需要返回一个新的不同的String实例(因为当前的操作无法更改)。您可以在其上调用另一个操作等等......
string newString = originalString.Replace("Hello","Hi") // new instance
int length = newString.Length // a simple property.
答案 5 :(得分:0)
只需返回每个操作的结果,如果结果是相同的类型,那么你可以调用结果的方法,然后调用结果的方法等。
public class A
{
public A SomeMethod();
...
}
A.SomeMethod().SomeMethod()...