在實際應用中,開發者完成代碼的編譯後,除非重新編譯更改後的代碼,否則開發者很難在原有代碼中添加新的功能.
在C#3.0中,提供了一個擴展方法的新特性,可以使得開發者在編譯後的程序集裡邊添加相關的方法,從而很容易地擴展原有的功能.
1、擴展方法的定義
定義擴展方法時,首先這個擴展方法要被定義在一個靜態類中(程序集加載時自動加載),因此這個擴展方法也必須是一個靜態方法。其次,在擴展方法的參數列表中,需要在第一個參數類型的前面添加關鍵字this作為修飾符,而緊跟其後的就是擴展類的名稱。如下所示:
代碼:擴展方法的定義
static class MyExtensions { public static string GetAssemblyName(this object obj) { return obj.GetType().Name; } }
在上述代碼中,定義了一個靜態類MyExtension,其中定義了一個擴展方法GetAssemblyName()。在該方法的參數列表中,使用了關鍵字this來修飾object類型,將擴展方法與object相關聯。因此,對於任何object對象和繼承了object類的類,都可以使用GetAssemblyName()方法,從而擴展了object的方法。
2、擴展方法的使用
使用擴展方法,既可以調用關聯類型實例化對象的擴展方法,也可以直接調用靜態類中的擴展方法,其中的方法參數輸入關聯類型。
代碼: 實例化對象的擴展方法
static void Main(string[] args) { object obj = new object(); obj.GetAssemblyName(); }
在代碼中,定義了一個object類型的參數obj,並調用obj類型的擴展方法GetAssemblyName,獲取Assembly的名稱.
當書寫代碼時,在VS環境中,開發者可以利用只能感知功能,比較容易地選擇擴展方法.如下圖所示:
此外還可以針對泛型類型添加擴展方法,這樣開發者就可以在制定的泛型類中使用擴展方法。俺還不是很理解泛型,暫時不顯擺了。