委託和事件

2021-09-06 07:00:55 字數 814 閱讀 8964

這個主題是關於委託的。

委託是用delegate定義的函式指標(其實並不只是乙個指標,而是包含一組相關資料)。委託型別定義委託變數,委託變數可以用「函式名」、匿名函式和lambda賦值。而委託變數可以呼叫該函式。

事件是對委託的封裝,類似屬性對字段的封裝。

事件施加的限制是:一、規定委託的型別,void (object, eventargs 或其子類 );二、對外只提供增加關聯函式+= 操作和減少關聯函式-=操作,而沒有提供獲取該委託變數的介面,防止任意修改。

只需要在定義委託變數前面加event 關鍵字就定義了事件,標準事件的委託是eventhandler。編譯器會自動生成相關的包裝**。但是也可以自定義包裝**:

event 委託型別 事件名 remove{} }

第一步是定義委託型別,第二步定義委託變數,第三步執行委託。

1. int delegate myfunc(int, int);

2. myfunc f1, f2;           

f1 = (x,y)=>x+y;

f2 = delegate(int x, int y);

3. f1(1,2); //==3

f2(1,2);//==2

委託的運用場合:當你需要傳遞引數給某個過程時,可以是選擇特定的演算法,也可以是通知物件去處理。

事件就是通知物件處理訊息這個用途。訊息發布者定義事件(委託),而訂閱者繫結事件處理函式,當發布者決定引發事件時,就通過呼叫繫結了的事件處理函式執行相關操作。

發布者不需要了解事件怎麼處理,由誰處理,只需要決定引發事件的時機;而訂閱者不需要了解事件是怎麼發生的,只需要簡單關聯並提供處理方案。

委託和事件

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

委託和事件

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

事件和委託

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