總結(jié)幾點(diǎn),方便以后復(fù)習(xí):
<1> delegate(委托) 是一個(gè)引用類型,存儲(chǔ)了具有相同簽名的方法的地址。
<2> delegate 的構(gòu)造函數(shù)不能為空。
<3>delegate的建立:
? ? int Max(int x,int y)
????{
? ? return x>y?x:y;
? ? }
? ? 1.delegate void MyDelegate(int a,int b);
? ? 2.MyDelegate md = new MyDelegate(Max); 或者是 MyDelegate md = mx;
<4>委托使用的注意事項(xiàng):
? ? 1.在C# 中,所有的委托都是從System.MulticastDelegate類派生的;
? ? 2.委托最大的作用就是為類的事件綁定事件處理程序;
? ? 3.委托實(shí)例中可以封裝靜態(tài)方法也可以封裝實(shí)例方法;
? ? 4.在創(chuàng)建委托實(shí)例時(shí),需要傳遞將要映射的方法或其他委托實(shí)例以指明委托將要封裝的函數(shù)原型(.NET中稱為方法簽名:signature)。注意,如果映射的是靜態(tài)方法,傳遞的參數(shù)應(yīng)該是類名.方法名,如果映射的實(shí)例方法,傳遞的參數(shù)應(yīng)該是實(shí)例名.方法名。
? ? 5.只有當(dāng)兩個(gè)委托實(shí)例所映射的方法以及該方法所屬的對象都相同時(shí),才認(rèn)為它們是相等的(從函數(shù)地址考慮)。
<5>MulticastDelegate類
? ? 1.MulticastDelegate類中可以包括一個(gè)委托的鏈表,這個(gè)表中,可以包括一個(gè)或多個(gè)元素(每個(gè)元素都是一個(gè)委托),我們可以將這個(gè)表稱為調(diào)用鏈。
? ? 2.當(dāng)我們調(diào)用一個(gè)MultiDelegate的時(shí)候,位于該MultiDelegate調(diào)用鏈中的委托就會(huì)被串行調(diào)用,這樣我們就可以只調(diào)用一個(gè)方法,而多個(gè)相同簽名的方法就會(huì)同時(shí)被串行調(diào)用。