iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 27
0

委派(delegate)最簡單的概念是--我們撰寫好的方法,可以交由別人執行。
反過來說---我們要執行的方法,可以交由外部別人決定。

意思是說,我們可以透過委派來傳遞方法。

在C#1.0開始我們就可以用delegate關鍵字來宣告委派,用來接受來自別人的方法

delegate是一個繼承自System.MulticastDelegate的類別,代表我們宣告的delegate可以接受多個方法。
而該類別的父類別是System.Delegate,祖類別是System.Object。

定義委派

雖說delegate本身是類別,但是定義方式跟方法有點像,要明確表明被委派方法的傳入型別回傳型別,例如:

public delegate void 要做的事情();

public delegate void 要通知的對象(string 通知內容);

public delegate string 要通知的對象(string 通知內容);

使用方式

使用方式就是new一個委派實體,並傳入被委派的方法
例如以下程式碼是計算完成時,交由委派用Invoke()執行通知誰:
https://ithelp.ithome.com.tw/upload/images/20191013/20120420TDdT8Ge1h0.png

Invoke也可以省略,以下兩個寫法都會去執行被委派的方法
https://ithelp.ithome.com.tw/upload/images/20191013/20120420HvpYbALM7C.png

接受多個方法或傳入字串

委派也可以接受多個方法一次執行,或能傳入字串的,寫法就是這樣:
https://ithelp.ithome.com.tw/upload/images/20191013/20120420NrT8ZtQJCH.png

執行結果:
https://ithelp.ithome.com.tw/upload/images/20191013/20120420KLs68rDu7j.png

將方法傳入其他類別

這次我把計算從0加到10的方式包裝進一個類別裡:

public class 計算
{
    public delegate void 要做的事情(int 通知);

    public void 計算總和(要做的事情 被委派的事情)
    {
        int 總和 = 0;
        for (int j = 0; j <= 10; j++)
        {
            總和 = 總和 + j;
        }
        被委派的事情.Invoke(總和);
    }
}

執行方式如下:
https://ithelp.ithome.com.tw/upload/images/20191014/20120420Kt1B0Y73VC.png


上一篇
泛型-實作泛型方法
下一篇
委派 C# 2.0 與 匿名函式
系列文
我要轉職成 C# / .NET 工程師34
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言