委託的延伸 - Action 和Func

如之前所提到的, 委託是將方法作為參數傳遞給其他的物件使用, 大幅增加物件的擴充性以及程式的維護性。而同時C#也進一步提供了兩個好用的類別作為委託的延伸應用, 分別是Action和Func

Action類別接受單一泛型物件作為參數, 並且沒有返回值, 如果用戶需要有多個參數或是需要返回值的話, 則可以使用Func類別, Func類別最多可以支援到16個輸入類別和一個返回類別。可以參考以下微軟C#的說明

Action 類別

出處

public delegate void Action<in T>(T obj);

Func 類別

出處

public delegate TResult Func<out TResult>();
public delegate TResult Func<in T,out TResult>(T arg);
public delegate TResult Func<in T1,in T2,out TResult>(T1 arg1, T2 arg2);public delegate TResult Func<in T1,in T2,in T3,in T4,in T5,in T6,in T7,in T8,in T9,in T10,in T11,in T12,in T13,in T14,in T15,in T16,out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16);

以下是範例程式碼


static void Main(string[] args)
 {
  string text = "Hello";
 
  Action<string> act = new Action<string>(Print);
  act.Invoke(text);
  //print "Hello" on the screen
 
  Func<string, int> func = new Func<string, int>(TextLength);
  var len=func.Invoke(text);
  Console.WriteLine(len);
  //print "5" on the screen
 
  Console.ReadKey();
 }
 
 private static void Print(string text)
 {
  Console.WriteLine(text);
 }
 
 private static int TextLength(string text)
 {
  return text.Length;
 }

在範例中, Action負責將文字輸出在Console上, 而Func則負責計算文字的長度並返回。由於已經將執行的方法封裝進Action跟Func裡, 在未來多執行緒的執行上也可以有效地應用上。

15 次瀏覽0 則留言

最新文章

查看全部

全新DAQ數據採集卡 - PXIe/PCIe 5500系列

簡儀科技發布全新JY 5500系列DAQ數據採集卡, 針對多功能測量需求的客戶提供完整的產品解決方案。JY 5500系列共有四種型號(5510, 5511, 5515, 5516)以及兩種介面(PXIe, PCIe)可搭配, 未來也會為客戶提供USB的介面選擇。 完整的量測功能 JY 5500系列板卡提供最高到32通道類比輸入, 4通道類比輸出, 32通道數位輸入/輸出功能, 搭配18 bit的A

C# Winform開發的利器 - 銳視測控軟體SeeSharpTools

C#, 自微軟從2000年發布之後, 經過20年的持續淬鍊、迭代,已經成為主流程式語言之一, 同時完整的生態系以及微軟強力的開源策略和支持, 讓C#語言提供最新最即時的語法以及功能。 C#程式語言的應用場景包含兩大類 桌面應用程式 (Winform, WPF) 網頁應用程式 (MVC, ASP.NET, ...) 在現今網路的時代, 桌面應用程式的使用量已經遠少於網頁應用程式。但在測試測量的領域,