public static class M_EventSystem {
public delegate void SendValueHandle(string str);// 參數(shù)基本類型 對象 List等
public static event SendValueHandle sendvalue;
// 發(fā)起調(diào)用委托的方法(廣播的發(fā)起)
public static void RaiseSendValue(string str) {
if (sendvalue != null) {
sendvalue(str);
}
}
}
為什么把event去掉枝哄,執(zhí)行效果不變。那又為什么要增加一個事件的關(guān)鍵字阻荒?
1.委托可以把一個方法作為參數(shù)代入另一個方法挠锥。
2.委托是類型,事件是對象.
3.其實(shí)事件是委托的一個修飾符侨赡,加了event(事件)修飾之后瘪贱,委托就被限制了,假設(shè)這個加了修飾符的事件稱為事件1辆毡,
通過事件1我們可以更好地控制注冊和注銷菜秦,也就是對于一個外部類,他只能“注冊自己+=舶掖、注銷自己-=”球昨,他只能注冊自己內(nèi)部的方法到事件上。
另外眨攘,外界也不能主動地觸發(fā)一個事件主慰。事件只能add嚣州、remove自己,不能賦值共螺。
也就是說事件只能+=该肴、-=,不能= 藐不。事件內(nèi)部就是一個private的委托和add.
總結(jié):
事件與委托最主要的區(qū)別應(yīng)該是事件不能在外部調(diào)用匀哄,但可以通過+=或-=進(jìn)行注冊。
如果委托變量為私有雏蛮,則外部不能注冊涎嚼;如果為公有,則外部又可以調(diào)用挑秉,破壞了封裝法梯,所以就定義一個event進(jìn)行限制是最合適的.