黑馬程式設計師 c 的委託與事件

2021-06-18 20:16:17 字數 2992 閱讀 7390

---------------------

asp.net+android+io開發s

、.net培訓

、期待與您交流! ----------------------

委託的宣告

public delegate void mydelegate(string str);

注1.委託的定義和方法的定義類似,只是在前面加了乙個delegate,但委託不是方法,它是一種型別。是一種特殊的型別,看成是一種新的物件型別比較好理解。用於對與該委託有相

同簽名的方法呼叫。

2.委託相當於c++中的函式指標,但它是型別安全的。

3.委託是從system.delegate派生,但不能象定義常規型別一樣直接從system.delegate派生,對委託的宣告只能通過上面的宣告格式進行定義。關鍵字delegate通知編譯器這是一

個委託型別,從而在編譯的時候對該類進行封裝,對這一過程c#定義了專門的語法來處理這一過程。

4.不能從乙個委託型別進行派生,因為它也是預設sealed的

5.委託即可以對靜態方法進行呼叫也可以對例項方法進行呼叫。

6.每個委託型別包含乙個自己的呼叫列表,當組合乙個委託或從乙個委託中刪除乙個委託時都將產生個新的呼叫列表。

7.兩個不同型別的委託即使它們有相同的簽名和返回值,但還是兩個不同型別的委託。但其實在使用中可看作是相同的。

委託的比較

c#中對委託定義了兩個操作符 == 和 !=

在以下情況下兩個委託是相等的:

1.當兩個委託都同時為null的時候

2.當兩個委託都不為null時,下列情況下是相等的。

a.當兩個委託的各自的呼叫列表只含有乙個入口點的時候

在下列情況下是相等的

(1) 呼叫同一物件的同一靜態方法

(2) 呼叫同一物件的同一例項方法

b.當兩個委託具有多個入口點時

在下列情況下是相等的

(1)只有當它們呼叫列表中的呼叫的方法按順序都一一對應相同的物件及物件的同一方法的時候

如上所述的兩個不同型別的委託但是它們具有相同的簽名和返回值時,只要滿足上述條件的,即使它們型別不同,但比較的結果也是相同的。

委託的異常處理

當呼叫該委託的方法中發生了異常時,首先在呼叫該委託的方法中搜尋catch語句塊。如果沒有,則去該委託呼叫的方法中去尋找有沒有catch語句塊,這和呼叫方法發生異常的處

理是一樣的。

當呼叫乙個為null的委託即委託中列表中不存在呼叫方法時,將發生nullrefrenceexception

委託的注意點:

當乙個委託有多個入口點的時候,呼叫委託將依該委託的呼叫列表中的方法的順序依次呼叫.這些方法共享乙個引數集合,所以當委託有返回值的時候呼叫完這個委託後的返回值是最

後乙個方法的返回值或是有out引數.如果該委託的引數為ref(引用型別),那麼在招待第乙個方法的時候如果對這個引數的值有所改變,那麼這個改變將會影響到後面的方法呼叫.

委託的乙個例子

using system;

using system.collections.generic;

using system.text;

}

// 宣告乙個委託mydelegate

public delegate void mydelegate(string str);

public class c

", str);

}

public static void m2(string str)

", str);

}

public void m3(string str)

", str);

}}

public class c1

", str);

}}

public class c2

", str);}} 

}

事件委託

事件概述

事件就是當物件或類狀態發生改變時,物件或類發出的資訊或通知。發出資訊的物件或類稱為"事件源",對事件進行處理的方法稱為"接收者",通常事件源在發出狀態改變資訊時,它

並不知道由哪個事件接收者來處理.這就需要一種管理機制來協調事件源和接收者,c++中通過函式指標來完成的.在c#中事件使用委託來為觸發時將呼叫的方法提供型別安全的封裝

事件的宣告

1.宣告乙個委託

public delegate void eventhandler(object sender, system.eventargs e);

2.宣告乙個事件

public event eventhandler changed;

3.引發乙個事件

public onchanged(enventargs e)

}

4.定義事件處理程式

public mytext_onchanged(object sender,eventargs e)

5.訂閱事件(將事件處理程式新增到事件的呼叫列表中)

mytext.changed += eventhandler(mytext_onchanged);

下面的乙個小例子說明了怎樣定義乙個完整的事件機制:

using system;

using system.collections.generic;

using system.text;

}

// 對change事件處理的程式

private static void mytext_changed(object sender, eventargs e)

\n" ,((mytext)sender).text);

} }

public class mytext

// text屬性

public string text

set }}

}

黑馬程式設計師 委託

asp.net unity開發 net培訓 期待與您交流!一 委託 1 一種資料型別 2 通過建立委託型別物件去呼叫函式 二 宣告格式 修飾符 delegate 函式返回型別 定義的代表識別符號 函式形參列表 注意事項 1 將函式賦值給委託型別變數時切記不要後面的方法 2 委託屬於引用型別範疇的。即...

黑馬程式設計師 事件

asp.net android ios開發 net培訓 期待與您交流!事件是類在發生其關注的事情時用來通知的一種方式,例如 封裝使用者介面的類可以定義乙個在使用者單擊該控制項時發生的事件,控制項類不關心單擊按鈕時發生了什麼 但它需要告知派生類單擊事件已經發生.然後,派生類可選擇如何響應 事件發行者 ...

黑馬程式設計師 對委託的初步理解

今天看到論壇裡有人問委託的問題,想想自己也搞不懂委託到底是什麼東西,好像以前稍微看過一點但沒具體怎麼看,所以今天就看了一些資料。看完後,我的理解是這樣的,這只是初步的理解,不對的請見諒,希望提出來,共同進步。委託呢其實就是乙個方法的大集合,就像列舉一樣,它把要用的方法都存到了裡面,當要呼叫什麼方法的...