1. 程式人生 > >c# 委托與事件的區別

c# 委托與事件的區別

變量 del 另一個 ext 類型 編譯 擴展 hand 例子

委托與事件的區別

委托和事件沒有可比性,因為委托是數據類型,事件是對象(可以理解為對委托變量的封裝。),下面說的是委托的對象(用委托方式實現的事件)和(標準的event方式實現)事件的區別。事件的內部是用委托實現的。(舉例子:三種實現事件方式的區別(直接用委托實現、用私有委托+公有方法模擬事件,直接用event事件實現))


因為對於事件來講,外部只能“註冊自己+=、註銷自己-=”,外界不可以註銷其他的註冊者,外界不可以主動觸發事件,因此如果用Delegate就沒法進行上面的控制,因此誕生了事件這種語法。add、remove。
事件是用來閹割委托實例的。事件只能add、remove自己,不能賦值。事件只能+=、-=,不能=、不能外部觸發事件。

-事件是一種特殊的委托的實例,或者說是受限制的委托,是委托一種特殊應用,在類的外部只能施加+=,-=操作符,二者本質上是一個東西。

反編譯:

public delegate void EventHandler(object sender, EventArgs e);

委托是一個類,它定義了方法的類型,使得可以將方法當作另一個方法的參數來進行傳遞,這種將方法動態地賦給參數的做法,可以避免在程序中大量使用If-Else(Switch)語句,同時使得程序具有更好的可擴展性。

區別:

委托:

1.是數據類型;

2.可以賦值,即可以用=;

3.外部內部都可以被調用;

事件:

1.是對象;

2.不可賦值,只能註冊和註銷自己;(閹割委托實例)

3.只能被內部調用;

c# 委托與事件的區別