C#中Func委託和Action委託的區別是什麼?


委託是一種代表具有特定引數列表和返回型別的方法的引用型別。當我們例項化一個委託時,我們可以將其例項與任何具有相容簽名和返回型別的方法關聯。我們可以透過委託例項來呼叫(或執行)該方法。

Func委託

Func是一個包含在System名稱空間中的泛型委託。它具有零個或多個輸入引數和一個輸出引數。最後一個引數被視為輸出引數。此委託可以指向最多接受16個引數並返回一個值的方法。

下面是具有兩個輸入引數和一個輸出引數的Func委託。

Func<string, string, string > Append;

示例

 線上演示

using System;
namespace DemoApplication {
   class Program {
      static void Main(string[] args) {
         Func<string, string, string> func = Append;
         string fullName = func("Michael", "Jackson");
         Console.WriteLine(fullName);
         Console.ReadLine();
      }
      static string Append(string firstName, string lastName) {
         return firstName + lastName;
      }
   }
}

輸出 

MichaelJackson

Action委託

Action是在System名稱空間中定義的委託型別。Action型別委託與Func委託相同,只是Action委託不返回值。換句話說,Action委託可以與具有void返回型別的方法一起使用。它可以包含最少1個和最多16個輸入引數,並且不包含任何輸出引數。

下面是具有兩個輸入引數和一個輸出引數的Func委託。

Func<string, string,> Print;

示例

using System;
namespace DemoApplication {
   class Program {
      static void Main(string[] args) {
         Action func = AppendPrint;
         func("Michael", "Jackson");
         Console.ReadLine();
      }
      static void AppendPrint(string firstName, string lastName) {
         string fullName = firstName + lastName;
         Console.WriteLine($"{fullName}");
      }
   }
}

輸出

上述程式碼的輸出是

MichaelJackson

更新於:2020年8月8日

2K+瀏覽量

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告