C#中的委托(一)
1、委托簡介
委托和類一樣,是一種用戶自定義的類型,但是類表示的是數據和方法的集合,而委托則持有一個或多個方法,以及一系列預定義的操作。
可以通過以下操作步驟來使用委托:
1、聲明一個委托類型。
2、使用該委托類型聲明一個委托變量。
3、創建委托類型的對象,把它賦值給委托變量。
4、可以選擇為委托對象增加其他方法。
5、在代碼中像調用方法一樣調用委托。
創建與使用類的步驟與以上步驟差不多,創建和使用類和委托的過程如下:

可以把委托看做一個包含有序方法列表的對象,這些方法具有相同的簽名和返回類型。
方法的列表稱為調用列表。
委托保存的方法可以來自任何類或結構,只要在下面兩點匹配:
1、委托的返回類型。
2、委托的簽名。
調用列表中的方法可以是實例方法也可以是靜態方法。
在調用委托時,會執行其調用列表中的所有方法,如下所示:

2、委托示例
先來看下一個簡單的示例,代碼如下:
internal class Program
{
delegate void PrintString(string s);
class A
{
public void Print1 (string s)
{
Console.WriteLine ($"Print1--{s}");
}
public static void Print2(string s)
{
Console.WriteLine($"Print2--{s}");
}
}
static void Main(string[] args)
{
A a = new A();
PrintString ps;
ps = a.Print1;
ps += A.Print2;
ps("hello");
}
}
}
輸出結果如下所示:

現在來分析一下這段代碼:
delegate void PrintString(string s);
定義了一個沒有返回值,參數為string的委托類型,對應步驟中的第一步。
關于聲明委托類型,圖解如下所示:

class A
{
public void Print1 (string s)
{
Console.WriteLine ($"Print1--{s}");
}
public static void Print2(string s)
{
Console.WriteLine($"Print2--{s}");
}
}
創建了一個類A,該類含有一個實例方法與一個靜態方法,方法的返回類型和簽名與委托類型一致。
PrintString ps;
聲明委托類型的變量,對應上面步驟中的第二步。
ps = a.Print1;
實例化并初始化該委托,對應上面步驟中的第三步,也可以使用下面的這種寫法:
ps = new PrintString(a.Print1);
推薦使用上面的快捷語法,它僅由方法說明符構成。這種快捷語法能夠工作是因為在方法名稱和其相應的委托類型之間存在隱式轉換。
ps += A.Print2;
為委托增加了一個方法。在C#中委托是恒定的,這樣子看好像我們剛剛創建的委托被修改了,其實并沒有被修改,而是創建了一個新的委托。
ps("hello");
調用委托,對應上面步驟中的第四步,在本例中圖解如下所示:

會依次執行a.Print1和A.Print2,因此結果如下所示:

以上就是介紹C#中委托的第一部分,希望對你理解C#中的委托有所幫助。
3、參考
《C#圖解教程(第4版)》——Daniel M. Solis

浙公網安備 33010602011771號