使用委托時要先實例化,和類一樣,使用new關鍵字產生委托的新實例,然后將一個或者多個與委托簽名匹配的方法與委托實例關聯。隨后調用委托時,就會調用所有與委托實例關聯的方法。
與委托關聯可以是任何類或者結構中的方法,可以是靜態方法,只要是可以訪問的方法都可以。創建一個委托類型使用關鍵字delegate(委托)
一個委托實例,關聯三個方法
移除一個委托實例中的方法 使用“-”
將方法作為參數傳遞
委托可以讓方法作為參數傳遞給其它方法。
事件自身就是委托類型,由於委托可以綁定和調用多個方法,所以會為事件的處理帶來方便。類型只需要對外公開事件,就可以與外部的其它地方關聯,從而實現事件訂閱
要在類中聲明事件,首先要定義用來作為事件封裝類型的委托,用event關鍵字來聲明事件。為了允許派生類重寫引發事件的代碼,通常會在類中聲明一個受保護的方法,習慣上
命名On<事件名>
protected virtual 表示受保護的,virtual
關鍵字用於修改方法、屬性、索引器或事件聲明,並使它們可以在派生類中被重寫。
由於不同的事件要傳遞的參數不同,更多時候是從EventArgs類派生的子類的實例,顯然EventHandler委托時不能滿足各種情況的。
如果針對不同的事件也定義一個對應的委托,數量一旦多起來,不好管理,為了解決這個問題,.NET類庫提供了一個帶有泛型參數的事件
處理委托。
public delegate void EventHandler<TEventArgs>(object sender,TEventArgs e); TEventArgs 是一個泛型參數