隨着串類,我們能夠調用方法此起彼伏這樣的:如何.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給出的例子是字符串類的成員,而不是擴展方法。 :) –