2010-08-14 72 views
4

其他人可以解釋這一點,(初學者的方法)。謝謝..你在C#中的「擴展方法」是什麼意思?

+1

http://social.msdn.microsoft.com/Search/en-US/?Query=extension+methods+c%23 – 2010-08-14 00:44:46

+1

http://msdn.microsoft.com/en-us/library/bb383977。 aspx – 2010-08-14 00:44:48

+0

感謝所有的答案......) – yonan2236 2010-08-14 00:59:28

回答

6

擴展方法是在行爲就像他們在其他類中定義靜態類只是靜態方法。
在類型變爲關鍵字this之前的第一個參數中,指示是擴展方法。

實施例:

public static class Extensions 
{ 
    public static object ExtensionMethodForStrings(this string s, object otherParameter) 
    { 
     //.... 
     return //whatever you want to return or not 
    } 
} 

這是對系統的擴展方法。字符串,它有兩個參數: - 字符串s:這是實例變量 - 對象otherParameter:

靜態:只要你想包括無

您可以調用此方法有兩種方式,您可以有許多方法:

string s = "Your string"; 
object o = new object(); // or whatever you want 
object result = Extensions.ExtensionMethodForStrings(s,o); 

擴展方法方式

string s = "Your string"; 
object o = new object(); // or whatever you want 
object result = s.ExtensionMethodForStrings(o); 

在第二種情況下,它的工作方式就好像類型字符串具有名爲ExtensionMethodForStrings的實例方法。實際上,編譯器是等價的。

+2

+1表示您仍然可以將其稱爲正常靜態方法。不僅如此,還可以在'null'引用上調用它。寫這個方法的時候記住這兩個事實是很重要的。不要假設'this'參數不能爲空。 – Rich 2010-08-14 01:02:31

2

擴展方法使您能夠將方法「添加」到現有類型而無需創建新的派生類型,重新編譯或以其他方式修改原始類型。擴展方法是一種特殊的靜態方法,但它們被稱爲擴展類型上的實例方法。對於用C#和Visual Basic編寫的客戶端代碼,調用擴展方法和實際在類型中定義的方法之間沒有明顯區別。

The C# article on Extension Methods

1

擴展方法是靜態類中的靜態方法,其靜態類的第一個參數前面有關鍵字this

C#編譯器有一些語法糖,可以將x.Foo(bar)的調用轉換爲SomeExtension.Foo(x, bar)。這被LINQ(Take,Skip,Where,Select等)廣泛使用,但如果你願意,你也可以編寫自己的擴展方法。

這個問題包括很多的有用的擴展方法的實例:

0

擴展方法是其行爲(有點)像它是一個類的成員的方法,但它不是該類的成員。它可以被稱爲該類的成員,但沒有提及該類的內部。

擴展方法是靜態方法,並且必須是靜態類的成員。

public static class StringExtensions 
{ 
    public static string HtmlEncode(this string dataString) 
    { 
     return HttpServerUtility.HtmlEncode(dataString); 
    } 
} 

關鍵字「這個」之前的第一參數類型標識爲一個擴展方法,和類它延伸。

這將是這樣使用:

string foo = "bar"; 
string myOutput = foo.HtmlEncode();