[.NET Framework] Công dụng của Delegate Action<T>

Khi sử dụng Action<T>, bạn không cần phải khai báo và khởi tạo một delegate để "đóng gói" một phương thức có 1 tham số. Ví dụ đoạn code sau khai báo một delegate tên DisplayMessage và "trao" cho nó một trong 2 phương thức Console.WriteLine hoặc ShowWindowsMessage:

 

using System;
using System.Windows.Forms;

delegate void DisplayMessage(string message);

public class TestCustomDelegate
{
   public static void Main()
   {
      DisplayMessage messageTarget; 

      if (Environment.GetCommandLineArgs().Length > 1)
         messageTarget = ShowWindowsMessage;
      else
         messageTarget = Console.WriteLine;

      messageTarget("Hello, World!");   
   }      

   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);      
   }
}

Thay vì phải khai báo và khởi tạo một delegate mới như trên ta có thể sử dụng một thực thể của Action<T> như sau:

 

using System;
using System.Windows.Forms;

public class TestAction1
{
   public static void Main()
   {
      Action<string> messageTarget; 

      if (Environment.GetCommandLineArgs().Length > 1)
         messageTarget = ShowWindowsMessage;
      else
         messageTarget = Console.WriteLine;

      messageTarget("Hello, World!");   
   }      

   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);      
   }
}

Như ta thấy T là kiểu dữ liệu của tham số mà Action<T> đóng gói, ở ví dụ trên hàm cần đóng gói có một tham số kiểu string nên ta dùng Action<string>

Ngoài ra ta còn có thể "nhờ" Action<T> "đóng gói" Anonymous Methods và Lambda Expression