委托,在C#編程中占有極其重要的地位,委托可以將函數封裝到委托對象中,并且多個委托可以合并為一個委托,委托對象則可以像普通對象一樣被存儲、傳遞,之后在任何時刻進行調用,因此,C#中函數回調機制的實現基本上依賴于委托。C#的delegate關鍵字用于聲明委托,它具有將聲明委托類型映射到System.Delegate類的能力,System.Delegate類位于mscorlib.dll中,是.NET的基礎核心類之一。使用delegate關鍵字聲明一個委托,實質上創建了System.Delegate的派生類,因此委托類型并非結構體也不是其它類型,它是一個類。一個委托對象也就是一個類的實例。以下是Delegate類的聲明:
復制代碼 代碼如下:
public abstract class Delegate
其中除了Action之外,其它的委托都是泛型的,其實就是一些泛型類。這便是.NET核心庫中全部的泛型委托了。這些泛型委托分為Func、Action中,它們借助于泛型特性,可以替代C#中幾乎所有的委托類型,也就是說一般情況下,在我們的程序中不必再聲明任何新的委托類型,就可以包裝所有的函數了。比如我們有兩個方法:
復制代碼 代碼如下:
public static void OtputString(string str)
{
Console.WriteLine(str);
}
public static int Add(int a, int b)
{
return a + b;
}
復制代碼 代碼如下:
var action = new Action<string>(OtputString);
action("OutputString Invoked!");
var func = new Func<int, int, int>(Add);
var sum = func(3, 5);
Console.WriteLine(sum);
復制代碼 代碼如下:
delegate void Action<T1, T2, T3, T4, T5, T6, T7, T8, T9>(T1 p1, T2 p2, T3 p3, T4 p4, T5 p5, T6 p6, T7 p7, T8 p8, T9 p9);
新聞熱點
疑難解答
圖片精選