W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
委托是調(diào)用方法的對(duì)象。我們可以認(rèn)為委托是函數(shù)指針或函數(shù)類型。
委托類型定義委托實(shí)例可以調(diào)用的方法類型。
委托類型定義方法的返回類型及其參數(shù)類型。
下面定義一個(gè)稱為Converter的委托類型:
delegate int Converter (int x);
Converter
與任何方法與 int
返回類型和單個(gè) int
參數(shù)兼容,如:
static int Square (int x) { return x * x; }
將一個(gè)方法分配給一個(gè)委托變量創(chuàng)建一個(gè)委托實(shí)例:
Converter t = Square;
其可以以與方法相同的方式被調(diào)用:
int answer = t(3); // answer is 9
這里是一個(gè)完整的例子:
delegate int Converter (int x); class Test { static void Main() { Converter t = Square; // Create delegate instance int result = t(3); // Invoke delegate Console.WriteLine (result); // 9 } static int Square (int x) { return x * x; } }
delegate
實(shí)例充當(dāng)調(diào)用者的委托:調(diào)用者調(diào)用delegate
,然后委托調(diào)用目標(biāo)方法。
委托類似于C函數(shù)指針。
一個(gè)委托實(shí)例可以引用多個(gè)目標(biāo)方法。
+
和 + =
運(yùn)算符合并了委托實(shí)例。
例如:
MyDelegate d = methodB; d += methodA;
調(diào)用d現(xiàn)在將調(diào)用 methodB
和 methodA
。
將按添加的順序調(diào)用代理。
-
和 -=
運(yùn)算符從左代表中刪除正確的代理操作數(shù)操作數(shù)。 例如:
d -= methodB;
調(diào)用 d
現(xiàn)在將僅調(diào)用 methodA
。
我們可以為委托分配一個(gè)空值:
MyDelegate d = null; d += methodB; // Equivalent (when d is null) to d = methodB;
如果多播委托具有非void返回類型,則調(diào)用者從最后一個(gè)要調(diào)用的方法接收返回值。
前面的方法仍然被調(diào)用,但是它們的返回值被丟棄。
所有委托類型隱含地派生自System.MulticastDelegate
,它繼承自 System.Delegate
。
當(dāng)實(shí)例方法分配給委托對(duì)象時(shí),委托對(duì)象維護(hù)方法所屬的方法和實(shí)例的引用。
System.Delegate
類的Target屬性表示此實(shí)例。
例如:
public delegate void Printer (int percentComplete); class Test { static void Main() { X x = new X(); Printer p = x.methodA; p(1); Console.WriteLine (p.Target == x); // True Console.WriteLine (p.Method); // Void methodA(Int32) } } class X { public void methodA (int percentComplete) { Console.WriteLine (percentComplete); } }
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: