[C#-1] C#中event的關鍵字存在的意義
阿新 • • 發佈:2019-01-06
C#中事件是基於委託。
不使用event關鍵字定義委託例項物件:
- //定義一委託型別
- publicdelegatevoid MyButtonEventHandler(string msg);
- //定義MyButton類,模擬按鈕物件
- publicclass MyButton
- {
- //定義一委託例項
- public MyButtonEventHandler Click;
- privatestring msg;
- /// <summary>
- /// 用於觸發Click事件(模擬點選按鈕)
- /// </summary>
-
public
- {
- if (Click != null)
- {
- Click("我點選了:" + msg);
- }
- }
- //建構函式
- public MyButton(string msg)
- {
- this.msg = msg;
- }
- }
- MyButton mb = new MyButton("MyButton物件");
- //指定點選按鈕後的處理方法
-
mb.Click += MyButton_Click;
- /* * * * * * * * * * * * * * * * * * * * * * * *
- 注意:
- 作為一個按鈕,本身正常的業務邏輯是:點選按鈕後,執行響應處理方法
- 但由於mb.Click沒有使用event關鍵字,只作為一公開普通委託例項物件
- 因此無需點選,就可任意執行處理方法,這顯然不是我們所期望的^-^
- * * * * * * * * * * * * * * * * * * * * * * * * */
- mb.Click("Click為公共委託物件,可任意觸發執行委託方法,而無需觸發OnClick方法");
- //點選按鈕觸發委託方法
- //mb.OnClick();
- //響應處理方法
-
private
- {
- Response.Write(msg);
- }
使用event關鍵字:
- //定義一委託型別
- publicdelegatevoid MyButtonEventHandler(string msg);
- publicclass MyButton
- {
- //定義一委託例項(事件)
- publicevent MyButtonEventHandler Click;
- privatestring msg;
- /// <summary>
- /// 用於觸發Click事件(模擬點選按鈕)
- /// </summary>
- publicvoid 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();