W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵
委托是調(diào)用方法的對象。我們可以認(rèn)為委托是函數(shù)指針或函數(shù)類型。
委托類型定義委托實(shí)例可以調(diào)用的方法類型。
委托類型定義方法的返回類型及其參數(shù)類型。
下面定義一個稱為Converter的委托類型:
delegate int Converter (int x);
Converter
與任何方法與 int
返回類型和單個 int
參數(shù)兼容,如:
static int Square (int x) { return x * x; }
將一個方法分配給一個委托變量創(chuàng)建一個委托實(shí)例:
Converter t = Square;
其可以以與方法相同的方式被調(diào)用:
int answer = t(3); // answer is 9
這里是一個完整的例子:
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ù)指針。
一個委托實(shí)例可以引用多個目標(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
。
我們可以為委托分配一個空值:
MyDelegate d = null; d += methodB; // Equivalent (when d is null) to d = methodB;
如果多播委托具有非void返回類型,則調(diào)用者從最后一個要調(diào)用的方法接收返回值。
前面的方法仍然被調(diào)用,但是它們的返回值被丟棄。
所有委托類型隱含地派生自System.MulticastDelegate
,它繼承自 System.Delegate
。
當(dāng)實(shí)例方法分配給委托對象時,委托對象維護(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號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: