C#中的委託

來源:互聯網
上載者:User

標籤: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#中的委託

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.