delegate 運算子 (C# 參考)

delegate 運算子會建立可轉換成委派型別的匿名方法:

Func<int, int, int> sum = delegate (int a, int b) { return a + b; };
Console.WriteLine(sum(3, 4));  // output: 7

注意

從 C# 3 開始,Lambda 運算式提供更精簡且更具表達性的方式來建立匿名函式。 使用 => 運算子來建構 Lambda 運算式:

Func<int, int, int> sum = (a, b) => a + b;
Console.WriteLine(sum(3, 4));  // output: 7

如需 Lambda 運算式功能的詳細資訊 (例如,捕捉外部變數),請參閱 Lambda 運算式

當您使用 delegate 運算子時,您可以省略參數清單。 如果您這樣做,則可以將建立的匿名方法轉換成含任何參數清單的委派型別,如下列範例所示:

Action greet = delegate { Console.WriteLine("Hello!"); };
greet();

Action<int, double> introduce = delegate { Console.WriteLine("This is world!"); };
introduce(42, 2.7);

// Output:
// Hello!
// This is world!

那是 Lambda 運算式不支援的唯一匿名方法功能。 在所有其他情況下,建議您以 Lambda 運算式的方式來撰寫內嵌程式碼。

從 c # 9.0 開始,您可以使用 [ 捨棄 ] 來指定方法未使用之匿名方法的兩個或多個輸入參數:

Func<int, int, int> constant = delegate (int _, int _) { return 42; };
Console.WriteLine(constant(3, 4));  // output: 42

為了回溯相容性,如果只命名單一參數 __ 會被視為匿名方法內該參數的名稱。

此外,從 c # 9.0 開始,您可以 static 在匿名方法的宣告中使用修飾詞:

Func<int, int, int> sum = static delegate (int a, int b) { return a + b; };
Console.WriteLine(sum(10, 4));  // output: 14

靜態匿名方法無法從封入範圍中捕獲本機變數或實例狀態。

您也可以使用 delegate 關鍵字來宣告委派型別

C# 語言規格

如需詳細資訊,請參閱 C# 語言規格匿名函式運算式一節。

另請參閱