有許多擴充套件類的方式。如果有類的源**,繼承就是給物件新增功能的好方法。但是如果沒有源**,該腫麼辦呢?此時可以使用擴充套件方法,它允許改變乙個類,但不需要該類的源**。
擴充套件方法是靜態方法,它是類的一部分,但實際上沒有放在類的源**中。假定下面demo中的money類需要乙個方法addtoamount(decimal amounttoadd)。但是,由於某種原因,程式集最初的源**不能直接修改。此時必須做的工作就是建立乙個靜態類,把方法addtoamount()新增為乙個靜態方法。
public注意addtoamount()方法的引數。對於擴充套件方法,第乙個引數是要擴充套件的型別,它放在this關鍵字的後面。這告訴編譯器,這個方法是money型別的一部分。在這個demo中,money是要擴充套件的型別。在擴充套件方法中,可以訪問所擴充套件型別的所有公有方法和屬性。static
class
moneyextension
}
在主程式中,addtoamount()方法看起來像是另乙個方法。它沒有顯示第乙個引數,也不能對它進行任何處理。要使用新方法,需要執行如下呼叫,這與其他方法相同:
cash1.addtoamount(10m);即使擴充套件方法是靜態的,也要使用標準的例項方法語法。注意這裡使用cash1是咧變數來呼叫addtoamount,而沒有使用型別名。
如果擴充套件方法與類中的某個方法同名,就從來不會呼叫擴充套件方法。類中已有的任何例項方法優先。
完整demo如下:
usingsystem;
using
system.collections.generic;
using
system.linq;
using
system.text;
using
system.threading.tasks;
namespace
擴充套件方法
C 擴充套件方法
c 語言從3.0開始增加了乙個很特別的功能 擴充套件方法。那麼擴充套件方法起什麼作用呢?很多時候我們想為已經存在的類擴充套件某些功能,而又沒有必要去繼承該類,甚至有時候這個類根本就不允許繼承,如string類,這時候就可以使用擴充套件方法來為其擴充套件功能。下面舉例說明 一 我們建立乙個類庫如下 c...
C 擴充套件方法
c 語言從3.0開始增加了乙個很特別的功能 擴充套件方法。那麼擴充套件方法起什麼作用呢?很多時候我們想為已經存在的類擴充套件某些功能,而又沒有必要去繼承該類,甚至有時候這個類根本就不允許繼承,如string類,這時候就可以使用擴充套件方法來為其擴充套件功能。下面舉例說明 一 我們建立乙個類庫如下 c...
C 擴充套件方法
使用 net 3.0之後,我一直都覺得有種方法很奇怪,這種方法在一般的方法前面多了乙個藍色的向下箭頭。這種方法其實是擴充套件方法,這種擴充套件方法不需要去修改原類。class program public static class extendfunction 例子中我定義了乙個擴充套件方法,這個方...