C# 和.NET的委托(delegate)與C/C++中的回調(diào)函數(shù)類似,但是委托比函數(shù)指針更安全。因?yàn)榛卣{(diào)函數(shù)只是一個(gè)指向存儲(chǔ)函數(shù)體的內(nèi)存指針,無(wú)法知曉函數(shù)的形參和返回類型,也不能保證指針?biāo)傅膬?nèi)容一定是所需要的函數(shù)體。
當(dāng)需要將函數(shù)作為參數(shù)來(lái)傳遞時(shí),才需要函數(shù)指針和委托。主要用于啟動(dòng)線程、編寫(xiě)通用類庫(kù)和事件處理。
C# 中委托的聲明格式為:
[[屬性]] [委托修飾符] delegate 返回類型 標(biāo)識(shí)符 [<類型參數(shù), …>] (形參列表) [where 類型參數(shù) : 類型參數(shù)約束[, …] ……];
其中,委托修飾符有: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) {…}
}
委托的使用方法參見(jiàn)下例:
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); // 靜態(tài)方法
Test t = new Test();
D cd2 = new D(t.M2); // 實(shí)例方法
D cd3 = new D(cd2); // 另一個(gè)委托
}
}
|
新聞熱點(diǎn)
疑難解答
圖片精選