1. 程式人生 > >C#的委托事件總結

C#的委托事件總結

值類型 訪問修飾符 建表 oid leg list 類型 創建 不存在

什麽是委托?
1.委托是C#中由用戶自定義的一個類型。
2.類表示的是數據和方法的集合,而委托實際上是一個能持有對某個或某些方法的引用的類。
3.與其他的類不同,委托類能擁有一個簽名,並且他只能持有與他的簽名相匹配的方法的引用。


如何使用委托
1.聲明一個委托類型。
2.使用一個委托類型聲明一個委托變量。
3.創建委托類型的對象,把它賦值給委托變量。該委托對象包含某個方法的引用,這個方法和第一步定義的簽名一致。
4.為委托對象增加其他方法。
5.像方法一樣調用委托。此時,委托持有的每一個方法都會依次執行。

聲明委托
public delegate void TestDelegate(int num);

1.聲明委托的語法與定義方法的語法類似,但沒有方法體,聲明的前面加關鍵字delegate。

2.聲明委托相當於聲明了一個新類,所以可以在任何聲明類的相同地方聲明委托。

3.可以在委托的聲明上應用任何常見的訪問修飾符,如public,private等。


創建委托對象
方式1:使用帶new運算符的對象創建表達式。
TestDelegate td1 = new TestDelegate(TestMethod);
方式2:使用方法名直接創建
TestDelegate td1 = TestMethod;
方法名可以來自任何類和結構,可以是實例方法,也可以是靜態方法,方法簽名必須和委托的簽名一致。

組合委托
添加:
A = B + C;
A += B;
移除:
A-= B;
如果委托為空之後調用會報空指針,如果添加兩個相同的委托,移除委托從列表的結尾移除查找的到的第一個,如果移除的委托不存在,不會報錯。

帶返回值的委托調用
多個方法加減,只有最後一個方法的返回值起作用。如果需要總體生效需要聲明參數為ref。
調用列表中最後一個方法的返回值就是委托調用最終的返回值。
調用列表中其他所有方法的返回值都會被忽略(覆蓋)。
委托簽名中的參數列表不為空時,需要區分該參數是值類型還是引用類型。若為引用類型參數,該參數的值可能會根據調用列表中的一個和多個方法而發生改變。

多播委托
持有多個方法的引用的委托,稱為多播委托。
在調用多播委托時,如果調用列表中的某一個方法拋出異常,整個叠代就會停止,該方法之後的所有方法將不會被調用。
Delegate類的GetInvocationList()方法,返回一個Delegate對象數組,該數組中的每個元素都是一個委托對象,該對象持有原多播委托調用列表中的一個方法。
delegate(int num) {
//方法體
};

C#的委托事件總結