在C#中,您不能繼承和擴充用訪問標識符標記為“封裝”的類型。但在C# 3.0中,擴充方法允許您擴充任何類,甚至是標記為封裝的類。擴充方法就是將靜態方法(必須聲明成static)插入到某個類和其子類中
(也就是說,在這些類中可以使用在外部定義的靜態方法)。
那麼要往哪個類中插入呢? 這就要在定義靜態方法時通過this關鍵字指定了。
例如在string類中加入一個靜態方法,它的定義方式為:
namespace MyExtensionMethods{ public static class Extension { public static void NoSpaces(this string s) { return s.Replace(" ", ""); } }}
在一個類中匯入這個extension方法時,開發人員就能夠對這個類包含的任何字串調用NoSapces()方法。
extension方法的第一個參數決定extension方法的有效類型。在這種情況下,“這個字串資料”(this string s)表明擴充方法適用於字串類;如果extension方法以“這個對象資料”(this object data)為第一個參數,則說明這個方法對每個對象有效。
要表明您希望匯入擴充方法,只需在它們的命名空間中包括一個using指令。例如,要應用上面說明的方法,需要在類檔案中包括一個using MyExtensionMethods指令:(列表B)
列表B
using MyExtensionMethods;namespace MyNamespace{ public class MyClass { public MyClass() { string data = "this is my data"; //nospaces will contain "thisismydata". string nospaces = data.NoSpaces(); } }}
在使用擴充方法時應注意以下兩點:
1. 擴充方法所在的類名可以是任意合法的類名。
2. 擴充方法所在的類必須和使用擴充方法的代碼在同一個命名空間裡,
否則無法編譯通過。
.NET Framework擴充方法尤其在很多類需要同樣的方法, 而這些類又無法繼承其它類時特別有用。 當然,在要對某個類進行擴充,但我們並沒有原始碼時,擴充方法也可以派上用場。 如:可以擴充ASP.NET MVC2.0中的View的HtmlHelper類的靜態方法。
本文根據:http://blog.csdn.net/zlghitler/article/details/1706086 整理.