委託和事件

2021-08-31 10:29:44 字數 1074 閱讀 3640

將方法作為引數傳遞給另外乙個方法,就必須把方法的細節封裝在一種新的型別的物件中,即委託。委託只是一種特殊的物件型別,其特殊之處在於,我們之前定義的所有物件基本都包括資料,而委託包含的只有方法的位址。

在c#中使用乙個類時,分為2個階段。首先要定義這個類,即告訴編譯器這個類由什麼欄位和方法組成。然後(除非使用靜態方法)例項化類的乙個物件。使用委託時,也需要這2個步驟。首先定義要使用的委託,對於委託,定義它就是要告訴編譯器這種型別的委託代表了哪種型別的方法,然後建立該委託的乙個或者多個例項。編譯器在後台將建立表示該委託的乙個類。

定義委託的語法如下:

delegate void intmethodinvoker(int x);

在這個例項中,定義了乙個委託intmethodinvoker,並指定該委託的每個例項都包含乙個方法的細節,該方法帶有乙個int引數,並返回void。理解委託的乙個要點是他們的型別是安全性非常高。在定義委託時必須給出它代表的方法簽名和返回型別等全部細節。理解委託的一種好方式就是把委託當做給方法簽名和返回型別指定名稱。

因為定義委託基本上是定義乙個新類,所以可以在定義類的任何地方定義委託,既可以在另外乙個類的內部定義,也可以在任何類的外部定義,還可以在命名空間中把委託定義為頂層物件。可以在委託定義上田間一般的訪問修飾符:public, private,protected等。

實際上,定義乙個委託是指定義乙個新類。委託實現為派生自基類system.multicastdelegate的類。system.multicastdelegate又派生自基類system.delegate。c#編譯器知道這個類,會使用其委託語法,因此我們不需要了解這個類的具體執**況,這是c#與基類共同合作,是程式設計更容易完成的另乙個例項。並且在術語方面。類有2個不同的術語:「類」表示較廣義的定義,「物件」表示類的例項。但是委託只有乙個術語,在建立委託的例項時,所建立的委託的例項仍稱為委託,必須從上下文中確定委託的確切含義。

在c#中,委託在語法上總是帶有乙個引數的建構函式。這個引數就是委託引用的方法。這個方法必須匹配最初定義委託時的簽名。如:

private delegate string getastring();

static void main()", firstmethod());

委託和事件

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

委託和事件

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

事件和委託

事件是物件傳送的訊息,以發訊號通知操作的發生。操作可能是由使用者互動 例如滑鼠單擊 引起的,也可能是由某些其他的程式邏輯觸發的。引發事件的物件稱為事件傳送方。捕獲事件並對其作出響應的物件叫做事件接收方。在事件通訊中,事件傳送方類不知道哪個物件或方法將接收到 處理 它引發的事件。所需要的是在源和接收方...