委托
一.什么是委托
IL層面
1>委托的本質就是一個類
2>繼承自System.MulticastDelegate
3>委托里面內置了3個方法:Invoke(),BeginInvoke(),EndInvoke()
二.委托的三個步驟
1>public delegate void MyDelegate();//1.委托的聲明
2>MyDelegate myDelegate = new MyDelegate(DoSomething);//2.委托的實例化(構造函數傳方法)
3>myDelegate.Invoke();//3.實例調用(Invok調用),這里等於執行了這個方法
myDelegate();//3.直接調用也和上面一行代碼是一樣的
三.委托的3大意義
1>解耦:
-好處是減少重復代碼;
-解耦是解除了判斷邏輯和共用邏輯之間的耦合;
-委托傳遞的是邏輯(邏輯就是方法);
2>異步多線程
3>多播委托
-+=為委托實例按順序增加方法,形成方法鏈,Invok()時按順序執行
--=為委托實例移除方法,從方法鏈的尾部開始匹配,遇到第一個完全吻合的移除,且只移除一個;沒有的也不異常
-多播委托帶返回值,結果以最后的為准
-價值:一個變量保存多個方法,可以增減方法;Invok時候可順序執行
事件
一.什么是事件
1>說白了,就是帶event關鍵字的委托實例
2>事件可以限制變量外部調用,或者直接賦值
3>事件可以把一堆的動作或行為,封裝出去,交給第三方指定
4>程序設計時候:
-固定部分,可以寫死
-不固定部分,通過一個事件去開放接口,外部可以擴展動作
二.委托和事件的區別和聯系
1>委托是一個類型,一個類,事件是委托的實例
2>比如委托時一個Student類,事件是“小明”實例