Delegate là cách cho phép dùng một method bên ngoài để thực thi một hành động tham chiếu đến thuộc tính của đối tượng.
Trước khi xem cách sử dụng trong C#, ta cần hiểu rõ tại sao và khi nào cần dùng đến Delegate.
Vậy thì, khi nào cần truyền một function để thực thi. Một số trường hợp phổ biến ta hay thấy là ứng dụng của delegate:
- Định nghĩa phương thức call-back
- Bạn cần dùng kết quả từ delegate
Đoạn code dưới đây (cách khai báo delegate trước đây) khai báo rành mạch một delegate có tên là DisplayMessage
và gán than chiếu cho phương thức WriteLine
hoặc ShowWindowsMessage
:
using System; using System.Windows.Forms; delegate void DisplayMessage(string message); public class TestCustomDelegate { public static void Main() { DisplayMessage messageTarget; // Tham chieu den phuong thuc se duoc goi if (Environment.GetCommandLineArgs().Length > 1) messageTarget = ShowWindowsMessage; else messageTarget = Console.WriteLine; // Goi den delegate messageTarget("Hello, World!"); } private static void ShowWindowsMessage(string message) { MessageBox.Show(message); } }
Để khai báo Delegate không rành mạch (không cần khai bai trước kiểu của delegate), ta dùng Action<T> như sau:
using System; using System.Windows.Forms; public class TestAction1 { public static void Main() { Action<string> messageTarget; // Tham chieu den phuong thuc se duoc goi if (Environment.GetCommandLineArgs().Length > 1) messageTarget = ShowWindowsMessage; else messageTarget = Console.WriteLine; // Goi den delegate messageTarget("Hello, World!"); } private static void ShowWindowsMessage(string message) { MessageBox.Show(message); } }
Lambda Expression quen thuộc hơn với developer những năm gần đây, cách này giúp đơn giản và giảm các khai báo không cần thiết.
using System; using System.Windows.Forms; public class TestLambdaExpression { public static void Main() { // Dung lambda de truyen noi dung func DisplayMessage(message => { if (Environment.GetCommandLineArgs().Length > 1) ShowWindowsMessage(message); else Console.WriteLine(message); }); } private static void DisplayMessage(Action<string> messageTarget){ messageTarget("Hello, World!"); } private static void ShowWindowsMessage(string message) { MessageBox.Show(message); } }
Để lại một bình luận
Bạn phải đăng nhập để gửi bình luận.