委託與事件

  前面已經具體說明了委託,這裏重點解析事件。(關於委託和Lambda:委託與Lambda表達式html

一.委託與事件的關係:

    • 委託能夠理解爲指向一個方法的數據類型
    • 因爲委託外界只須要經過一個委託變量接收委託,就能夠隨意的調用了。很是不安全,事件對委託作了封裝。使得外界不能隨便調用
    • 事件內部是經過委託來實現的
  • 爲了方便操做委託,體統提供了三種泛型委託:
    • Action                 //無返回值泛型委託
    • Func                   //有返回值泛型委託,最後一位爲:返回值
    • predicate             //返回值爲bool的泛型委託
  • 匿名方法:
    • Predicate<string> p = delegate(string str) { return true; };
  • 事件處理:
    • 事件是基於EventHandleEventArgs基類的
      • 第一個參數 sender,其中object類型的參數 sender表示的是發送消息的對象,爲何要使用object類型呢,這是由於不一樣類型的對象調用時使用object能很好的兼容
      • 第二個參數 e,他的類型爲EventArgs.EventArgs這個類沒有實際的用途,只是做爲一個基類讓其餘對象繼承。不少對象不須要傳遞額外的信息,例如按鈕事件,只是調用一個回調方法就夠了。當咱們定義的事件不須要傳遞額外的信息時,這時調用EventArgs.Empty就好了,不須要從新構建一個EventArgs對象

二.事件的定義:

  事件(event)的聲明的語法以下:安全

    public  event  委託類型  事件名;ide

例子:post

        //定義一個委託  public delegate void delegateRun();  //定義一個事件  public event delegateRun eventRun;

   事件的使用方法:spa

class Program
{
    static void Main(string[] args)
    {
        EvtHandler evt = new EvtHandler();
        evt.evtAct += evt_evtAct;
        evt.evtHandler += evt_evtHandler;
        evt.handler();
        Console.ReadKey();
    }
    static void evt_evtHandler(object sender, EventArgs e)
    {
        Console.WriteLine("事件處理者");
    }
    static void evt_evtAct()
    {
        Console.WriteLine( "委託事件");
    }
}
public class EvtHandler
{
    public event EventHandler evtHandler;
    public event Action evtAct;
    public void handler()
    {
        evtHandler(null,null);
        evtAct();
    }
}
事件的使用方法

三.使用事件須要的步驟:

    1. 建立委託
    2. 將建立的委託與特定事件關聯(事件發生時,咱們要執行的方法的時候,咱們須要和這個委託有相同的簽名
    3. 編寫事件處理程序
    4. 利用編寫的C#事件處理程序生成一個委託實例
    5. 把這個委託實例添加到產生事件對象的事件列表中去,這個過程又叫訂閱事件

四.訂閱事件:

    定義好事件後,與事件有關的人會訂閱事件,只有訂閱事件的對象纔會收到發生事件的通知,沒有訂閱該事件的對象則不會收到通知。code

    訂閱事件的語法以下:htm

        事件名+=new 委託名(方法名);對象

五.引起事件:

  public event MyDel eventRun;blog

  public void Begin()繼承

     {
           eventRun();
     }
相關文章
相關標籤/搜索