事件和委託

2021-04-25 22:24:25 字數 1771 閱讀 2374

事件是物件傳送的訊息,以發訊號通知操作的發生。操作可能是由使用者互動(例如滑鼠單擊)引起的,也可能是由某些其他的程式邏輯觸發的。引發事件的物件稱為事件傳送方。捕獲事件並對其作出響應的物件叫做事件接收方。

在事件通訊中,事件傳送方類不知道哪個物件或方法將接收到(處理)它引發的事件。所需要的是在源和接收方之間存在乙個媒介(或類似指標的機制)。.net framework 定義了乙個特殊的型別(delegate

),該型別提供函式指標的功能。

委託是可儲存對方法的引用的類。與其他的類不同,委託類具有乙個簽名,並且它只能對與其簽名匹配的方法進行引用。這樣,委託就等效於乙個型別安全函式指標或乙個**。雖然委託具有許多其他的用途,但這裡只討論委託的事件處理功能。乙個委託宣告足以定義乙個委託類。宣告提供委託的簽名,公共語言執行庫提供實現。下面的示例顯示了事件委託宣告。

c#

複製**

public delegate void alarmeventhandler(object sender, alarmeventargs e);

visual basic

複製**

public

delegate

sub alarmeventhandler(sender as

object, e as alarmeventargs)

該語法與方法宣告的語法相似,但是delegate關鍵字通知編譯器 alarmeventhandler 是乙個委託型別。按照約定,.net framework 中的事件委託有兩個引數:引發事件的源和該事件的資料。

alarmeventhandler 委託的例項可以繫結到任何乙個與其簽名匹配的方法上,例如下面的示例中顯示的 wakemeup 類的 alarmrang 方法。

c#

複製**

public

class wakemeup

; ...

}

visual basic

複製**

public

class wakemeup

' alarmrang has the same signature as alarmeventhandler.

public

sub alarmrang(sender as

object, e as alarmeventargs)

...end

sub ...

endclass

只有當事件生成事件資料時才需要自定義事件委託。許多事件,包括一些使用者介面事件(例如滑鼠單擊)在內,都不生成事件資料。在這種情況下,類庫中為無資料事件提供的事件委託 system.eventhandler

便足夠了。其宣告如下。

c#

複製**

delegate void eventhandler(object sender, eventargs e);

visual basic

複製**

public

delegate

sub eventhandler(sender as

object, e as eventargs)

事件委託是多路廣播的,這意味著它們可以對多個事件處理方法進行引用。有關詳細資訊,請參見 delegate

。委託考慮了事件處理中的靈活性和精確控制。通過維護事件的已註冊事件處理程式列表,委託為引發事件的類擔當事件傳送器的角色。

委託和事件

主要過程如下 1.在後台 中,我們可以定義處理程式方法alartrang 2.然後定義委託,引用到處理程式方法的例項。3.最後將委託新增到事件中。從而,引發事件時就會呼叫相關的事件處理方法。若要使用在另乙個類中定義的事件,必須定義和註冊乙個事件處理程式。事件 處理程式必須具有與為事件宣告的委託相同的...

委託和事件

委託的宣告 public delegate void mydelegate string str 注1.委託的定義和方法的定義類似,只是在前面加了乙個delegate,但委託不是方法,它是一種型別。是一種特殊的型別,看成是一種新的物件型別比較好理解。用於對與該委託有相 同簽名的方法呼叫。2.委託相當...

委託 和 事件

using system using system.collections.generic using system.linq using system.text public string message 定義乙個委託。委託除了delegate關鍵字。別的應該和賦予的那個方法格式一樣 public...