随着串类,我们能够调用方法此起彼伏这样的:如何.NET串类的工作
originalString.TrimStart().TrimEnd().Replace("Hello","Hi")
我想知道它是如何工作的?这是什么类型的操作在.net框架中调用。
如果你能给我一个例子来创建一个这样的类,我将不胜感激。
感谢,
随着串类,我们能够调用方法此起彼伏这样的:如何.NET串类的工作
originalString.TrimStart().TrimEnd().Replace("Hello","Hi")
我想知道它是如何工作的?这是什么类型的操作在.net框架中调用。
如果你能给我一个例子来创建一个这样的类,我将不胜感激。
感谢,
每到这个方法返回新的字符串,所以basicaly这是呼吁返回字符串字符串的方法。您可以创建自己的类,创建方法并像这样运行它。
非常重要的是要注意到字符串是不可变的,所以要求例如字符串上的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();
很简单。字符串是一个不可变的类。这意味着你在它上面进行的每个操作都会转换它的值,因此需要返回一个新的不同的String实例(因为当前的实例不能被更改)。您可以拨打另一个操作...
string newString = originalString.Replace("Hello","Hi") // new instance
int length = newString.Length // a simple property.
这没什么特别的。 string
类的许多方法都会返回一个字符串,因此您可以在返回的值上调用其他方法。
例如TrimStart()
返回一个新的字符串,其中白空间在开始时已被剥离。然后你在那个返回的字符串上调用TrimEnd()
。
所有上述方法都返回字符串。所以它只是一个类型的问题。
,你可以创建自己的类像这个 -
类定义
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");
背后你看到什么叫做Method Chaining委托人(或者也是流畅的界面)。
它的工作原理,因为该方法返回相同类型作为其含有式(即TrimStart是String类的功能,并且还返回一个字符串)。但是,这不仅限于Strings。
我能想到的最好的现代例子之一是jQuery(在维基百科文章中提到)。
简单的返回结果与每一个操作,如果结果是相同类型的,那么你可以调用结果的方法,那么结果的结果的方式等
public class A
{
public A SomeMethod();
...
}
A.SomeMethod().SomeMethod()...
除了这些都不是扩展方法,他们只是返回一个新的字符串! –
@ Moo-Juice扩展方法可以返回新字符串!扩展方法确实不需要更改值 – wudzik
!但是OP给出的例子是字符串类的成员,而不是扩展方法。 :) –