W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
委托是調用方法的對象。我們可以認為委托是函數(shù)指針或函數(shù)類型。
委托類型定義委托實例可以調用的方法類型。
委托類型定義方法的返回類型及其參數(shù)類型。
下面定義一個稱為Converter的委托類型:
delegate int Converter (int x);
Converter
與任何方法與 int
返回類型和單個 int
參數(shù)兼容,如:
static int Square (int x) { return x * x; }
將一個方法分配給一個委托變量創(chuàng)建一個委托實例:
Converter t = Square;
其可以以與方法相同的方式被調用:
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
實例充當調用者的委托:調用者調用delegate
,然后委托調用目標方法。
委托類似于C函數(shù)指針。
一個委托實例可以引用多個目標方法。
+
和 + =
運算符合并了委托實例。
例如:
MyDelegate d = methodB; d += methodA;
調用d現(xiàn)在將調用 methodB
和 methodA
。
將按添加的順序調用代理。
-
和 -=
運算符從左代表中刪除正確的代理操作數(shù)操作數(shù)。 例如:
d -= methodB;
調用 d
現(xiàn)在將僅調用 methodA
。
我們可以為委托分配一個空值:
MyDelegate d = null; d += methodB; // Equivalent (when d is null) to d = methodB;
如果多播委托具有非void返回類型,則調用者從最后一個要調用的方法接收返回值。
前面的方法仍然被調用,但是它們的返回值被丟棄。
所有委托類型隱含地派生自System.MulticastDelegate
,它繼承自 System.Delegate
。
當實例方法分配給委托對象時,委托對象維護方法所屬的方法和實例的引用。
System.Delegate
類的Target屬性表示此實例。
例如:
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)系方式:
更多建議: