我想了解擴展方法是如何工作的嗎?我們可以在非靜態類中定義擴展方法嗎?擴展方法如何工作
*
爲什麼我們把靜態內部類的擴展方法?
*
根據MSDN,
**他們的第一參數指定的方法操作在其上的類型,並且該參數由該改性劑之前。擴展方法 僅在使用using僞指令將名稱空間導入 源代碼時纔在範圍內。
**
什麼是這運營商在這裏的作用,它是如何關聯的是擴展方法來這樣的說法?
我想了解擴展方法是如何工作的嗎?我們可以在非靜態類中定義擴展方法嗎?擴展方法如何工作
*
爲什麼我們把靜態內部類的擴展方法?
*
根據MSDN,
**他們的第一參數指定的方法操作在其上的類型,並且該參數由該改性劑之前。擴展方法 僅在使用using僞指令將名稱空間導入 源代碼時纔在範圍內。
**
什麼是這運營商在這裏的作用,它是如何關聯的是擴展方法來這樣的說法?
不,你不能在一個非靜態的類上定義擴展方法。
this
是語法糖,它允許在實例上調用您的靜態擴展方法。但在一天結束時,擴展方法不過是靜態類中的靜態方法。
所以基本上:
var test = myInstance.MyExtensionMethod();
相同
var test = MyExtensionClass.MyExtensionMethod(myInstance);
他們是4所要求的方法是一個擴展方法:
this
關鍵字第一個參數所以你不能在非靜態類中定義擴展方法。
整個擴展方法的功能是某種語法糖。下面的擴展方法上MyClass
聲明:
// The following extension methods can be accessed by instances of any
// class that is or inherits MyClass.
public static class Extension
{
public static void MethodA(this MyClass myInterface, int i)
{
Console.WriteLine
("Extension.MethodA(this IMyInterface myInterface, int i)");
}
}
可以通過兩種方式來調用:
var myClassObject = new MyClass();
Extension.MethodA(myClassObject);
或者
myClassObject.MethodA();
然而,第二個將被改造成由編譯器的第一個無論如何。
不,擴展方法必須在靜態類中,這只是規則。本來可以允許在任何地方定義擴展方法,但是爲了更容易找到它們,它們不能被埋在類中,並且有很多其他代碼。
this
關鍵字用於擴展方法的第一個參數以指定它是擴展方法。
(內部實現一個普通的方法也具有對對象的引用作爲第一個參數,那麼什麼編譯器與擴展方法只是將它們添加到類中的其他方法。)
什麼是作用在這裏這運營商,它是如何關聯的是 擴展方法來這樣的說法?
在這方面this
是不是一個操作符,它是一種改性劑。它可能被稱爲別的東西,它與this
對象沒有任何關係,它指的是在普通方法調用中的當前對象。
this
改性劑的作用是告訴編譯器,這實際上是一個擴展方法,而不是標準的靜態方法,所以它不會抱怨,當你調用它的方式,其看起來就像一個實例方法調用,但事實並非如此。
這只是語法... –
另請參見我的答案在這裏:http://stackoverflow.com/questions/3045242/this-in-function-parameter/3045313#3045313 –