1》》》web
在委託實例前,不加event,那這個委託就是一個普通的委託,咱們能夠用別的函數調用,也能夠直接用對象調用,但加上關鍵字以後,只能用成員函數調用 c#
- public delegate void MyButtonEventHandler(string msg);
- public class MyButton
- {
- public MyButtonEventHandler Click;
- private string msg;
- public void OnClick()
- {
- if (Click != null)
- {
- Click("我點擊了:" + msg);
- }
- }
- //構造函數
- public MyButton(string msg)
- {
- this.msg = msg;
- }
- }
- MyButton mb = new MyButton("MyButton對象");
- //指定點擊按鈕後的處理方法
- mb.Click += MyButton_Click;
- mb.Click("Click爲公共委託對象,可任意觸發執行委託方法,而無需觸發OnClick方法");
- //點擊按鈕觸發委託方法
- //mb.OnClick();
- //響應處理方法
- private void MyButton_Click(string msg)
- {
- Response.Write(msg);
- }
使用event關鍵字:設計模式
- //定義一委託類型
- public delegate void MyButtonEventHandler(string msg);
- public class MyButton
- {
- //定義一委託實例(事件)
- public event MyButtonEventHandler Click;
- private string msg;
- ///
- /// 用於觸發Click事件(模擬點擊按鈕)
- ///
- public void OnClick()
- {
- if (Click != null)
- {
- Click("我點擊了:" + msg);
- }
- }
- //構造函數
- public MyButton(string msg)
- {
- this.msg = msg;
- }
- }
- MyButton mb = new MyButton("MyButton對象");
- mb.Click += MyButton_Click;
- //如下報錯
- //mb.Click("Click爲雖公共委託對象,但不可隨意執行委託方法,由於有event關鍵字修飾!");
- //點擊按鈕後才觸發委託方法(保證只有MyButton對象纔可觸發該事件)
- mb.OnClick();
2》》》》》》》安全
delegate 委託
event 事件
事件是特殊的委託,是多播委託,能夠添加多個事件處理函數,可是委託只能綁定一個處理函數。函數
c#中的delegate是Observe(觀察者)設計模式的一種實現,以多播委託爲底層支持,且是類型安全的。this
event就是delegate的一種應用。加上evspa