C# 和.NET的委托(delegate)與C/C++中的回調函數類似,但是委托比函數指針更安全。因為回調函數只是一個指向存儲函數體的內存指針,無法知曉函數的形參和返回類型,也不能保證指針所指的內容一定是所需要的函數體。
當需要將函數作為參數來傳遞時,才需要函數指針和委托。主要用于啟動線程、編寫通用類庫和事件處理。
C# 中委托的聲明格式為:
[[屬性]] [委托修飾符] delegate 返回類型 標識符 [<類型參數, …>] (形參列表) [where 類型參數 : 類型參數約束[, …] ……];
其中,委托修飾符有:new、public、protected、internal、private,及它們的有效組合。與常量修飾符的相同。例如:
delegate int D1(int i, double d);
class A {
public static int M1(int a, double b) {…}
}
class B {
delegate int D2(int c, double d);
public static int M1(int f, double g) {…}
public static void M2(int k, double l) {…}
public static int M3(int g) {…}
public static void M4(int g) {…}
delegate object D3(string s);
public static object M5(string s) {…}
public static int[] M6(object o) {…}
}
委托的使用方法參見下例:
delegate void D(int x);
class Test {
public static void M1(int i) {…}
public void M2(int i) {…}
}
class Demo {
static void Main() {
D cd1 = new D(Test.M1); // 靜態方法
Test t = new Test();
D cd2 = new D(t.M2); // 實例方法
D cd3 = new D(cd2); // 另一個委托
}
}
新聞熱點
疑難解答