標籤:c# 委託
C#中的委託類似於C++中的一種特殊的指標:指向函數的指標。通過定義指向函數的指標,在程式中我們就可以靈活的調用多個函數,當然,前提是這些函數的傳回型別和參數列表的個數和類型都相同。通過指向函數的指標,我們還可以將函數作為另一個函數的參數。
首先複習一下C++中的指向函數的指標。
1:定義。格式如下:
傳回型別 (*指標變數名)(參數類型列表) 注意:參數類型列表中只有參數類型和個數,沒有形參名。
如:
double (*fp)(double, double)
2:函數指標的賦值。
格式:指標變數名 = 函數名
注意:函數名所代表的函數,其傳回型別和參數列表必須和函數指標的定義中的參數相同。
假如有以下的兩個函數:
double multiple(double p1, double p2){ return p1 * p2;}double divide(double p1, double p2){ return p1 / p2;}
在程式中就可以將這兩個函數賦給指標fp並且使用了。
如:
fp = multiply;fp(1.0, 2.0); //等同於調用函數multiply(1.0, 2.0);fp = divide;fp(4, 2); //等同於調用函數divide(4, 2);
3:利用函數指標將函數作為另一函數的參數。
因為指向函數的指標就是一個指標變數,所有可以將其作為函數的參數。
如:
void doSomething(double (*fp)(double, double), double p1, double p2){ cout << fp(p1, p2) << endl;}
C#中的委託也是如此。
首先要定義委託類型的變數;
然後要對變數進行賦值;
最後是調用。
1:委託類型的定義:使用關鍵字delegate。
格式:delegate 傳回型別 委託類型名(形參列表)
注意:與C++中的函數指標不同,在定義委託類型的形參列表中,除了要給出類型,還有給出形參名。類似於在定義函數原型時,加了個delegate關鍵字。
如:
delegate double MyDelegate(double p1, double p2);
注意:此處的MyDelegate並不是一個變數,而是類似於類的一個類型,在使用該委託時還有定義該類型的變數。
2:定義委託類型的變數。
格式:委託類型名 變數名;
3:委託變數的賦值和調用
假如程式中有以下兩個函數:
double Multiply(double p1, double p2){ return p1 * p2;}double Divide(double p1, double p2){ return p1 / p2;}
有兩種方法可以給委託變數賦值
MyDelegate myDelegate; //定義委託類型的變數myDelegate = new MyDelegate(Multiply); //賦值方法1Console.WriteLine(myDelegate(2.0, 3.0)); //委託變數的使用myDelegate = Divide; //賦值方法2Console.WriteLine(myDelegate(4, 2));
4:將委託用於函數參數。和C++的函數指標略有不同。
例:
void Test(MyDelegate myDelegate){ myDelegate(3, 4);}
C#中的委託