作為一個.NET程式猿,我們經常要跟.net自帶類庫或者第三方dll類庫打交道,有時候我們未必能夠通過反編譯來檢視它們的代碼,但是我們通常需要給它們擴充一些新的功能,Helper類就應運而生了,我們開發出一個個的靜态方法以友善調用。久而久之,我們封裝的Helper類越來越多,但是這個Helper裡邊的方法不一定為每個開發人員所熟知,而且我們每每要敲擊XXXHelper.XXX()這種類似的方法,其實這個XXXHelper完全是可以省略掉的,等于是我們每次都多寫了這麼一點東西。
有沒有解決辦法呢?擴充方法就是解決這個問題的。擴充方法使您能夠向現有類型“添加”方法,而無需建立新的派生類型、重新編譯或以其他方式修改原始類型。它可以對現有類功能進行擴充,進而使該類型的執行個體具有更多的方法,偉大的LINQ就是用的這個東西實作的。
使用擴充方法的好處:
1、讓方法調用回歸面向對象本身,即方法是屬于對象的,增強代碼可讀性
2、從一定程度上來說擴充方法讓你的類庫有了無限的可能性
擴充方法必須遵守以下規則:
1.擴充類必須是靜态非泛型的;
2.擴充方法必須是靜态的
3.擴充方法的第一個參數必須以this開頭,參數必須是原有類的類型
舉個擴充方法的栗子:
我們經常需要對對象進行序列化,那麼我們可以給對象object擴充一個這樣的方法ToJSON
調用:
平時我們總是需要操作字元串類型,是以這裡就送上一個string類型的擴充方法類庫:

View Code
1、在vs的智能提示中,擴充方法是帶有藍色下滑箭頭的
2、如果擴充方法和被擴充類中的方法相同,會怎麼樣?
擴充方法的優先級總是比類型本身中定義的執行個體方法低,是以與接口或類方法具有相同名稱和簽名的擴充方法永遠不會被調用。
3、注意你是為哪個類型進行擴充,比如你是對string類型做擴充,還是對object類型、List<object>類型做擴充,一定要明确擴充的類型範圍
4、是時候嘗試将你的那些Helper類庫轉換成擴充方法了
5、當你苦于類庫裡沒有你想要的方法時,那就大膽的擴充吧
擴充方法本身并不難,難點在于你是否能夠恰到好處地使用它,也就是說你是否知道在某個合适的時候使用它。