有許多擴充套件類的方式, 繼承就是給物件新增功能的好方法。 擴充套件方法是給物件新增功能的另乙個選項, 在不能使用繼承時,也可以使用這個選項(例如類是密封的)。
假設希望用乙個方法擴充套件 string 型別, 該方法計算字串中的單詞數:public static class stringextension
}
getwordcount 方法利用 string.split 方法把字串分割到字串陣列中,使用length屬性計算陣列中元素的個數, 使用 this關鍵字和第乙個引數來擴充套件字串。 這個關鍵字定義了要擴充套件的型別。即使擴充套件方法是靜態的,也要使用標準的例項方法語法。
這裡使用fox變數而沒有使用型別名來呼叫 getwordcount()。
string fox = "hello world";
int wordcount = fox.getwordcount(); // you look look 使勁 look
console.writeline( string.format("wordcount = ", wordcount) );
編譯時,編譯器把它改為呼叫靜態方法:
int wordcount = stringextension.getwordcount(fox);
使用例項方法的語法, 而不是從**中直接呼叫靜態方法, 會得到乙個好得多的語法。這個語法還有乙個好處:該方法的實現可以用另乙個類取代,而不需要更改**,只需要執行新的編譯器。
定義擴充套件類需要注意的一些小細節:
自定義的擴充套件類的命名空間與要擴充套件類的命名空間相同, 否則需要使用 using 指令,編譯器才能找到自定義擴充套件方法
如果自定義了同名的擴充套件方法,編譯器永遠不會使用
當自定義多個同名的擴充套件方法,編譯器會報錯,因為它不知道用哪個
注意:擴充套件方法也可用於擴充套件介面。 這樣,實現該介面的所有類就有了公共功能。
C 擴充套件方法
c 語言從3.0開始增加了乙個很特別的功能 擴充套件方法。那麼擴充套件方法起什麼作用呢?很多時候我們想為已經存在的類擴充套件某些功能,而又沒有必要去繼承該類,甚至有時候這個類根本就不允許繼承,如string類,這時候就可以使用擴充套件方法來為其擴充套件功能。下面舉例說明 一 我們建立乙個類庫如下 c...
C 擴充套件方法
c 語言從3.0開始增加了乙個很特別的功能 擴充套件方法。那麼擴充套件方法起什麼作用呢?很多時候我們想為已經存在的類擴充套件某些功能,而又沒有必要去繼承該類,甚至有時候這個類根本就不允許繼承,如string類,這時候就可以使用擴充套件方法來為其擴充套件功能。下面舉例說明 一 我們建立乙個類庫如下 c...
C 擴充套件方法
使用 net 3.0之後,我一直都覺得有種方法很奇怪,這種方法在一般的方法前面多了乙個藍色的向下箭頭。這種方法其實是擴充套件方法,這種擴充套件方法不需要去修改原類。class program public static class extendfunction 例子中我定義了乙個擴充套件方法,這個方...