Delegates trong C# là một kiểu dữ liệu đại diện cho các phương thức có một chữ ký nhất định. Điều này cho phép các phương thức được lưu trữ trong các biến, được truyền như các tham số, và được gọi động.
1. Tạo Delegate
Đầu tiên, bạn cần khai báo một delegate. Một delegate định nghĩa chữ ký của các phương thức mà nó có thể tham chiếu đến.
// Khai báo một delegate
public delegate int MathOperation(int x, int y);
2. Sử Dụng Delegate
Sau khi khai báo delegate, bạn có thể tạo các phương thức có cùng chữ ký và gán chúng cho delegate.
public class Program
{
// Các phương thức có cùng chữ ký với delegate MathOperation
public static int Add(int x, int y)
{
return x + y;
}
public static int Subtract(int x, int y)
{
return x - y;
}
public static void Main()
{
// Tạo các biến delegate
MathOperation addOperation = new MathOperation(Add);
MathOperation subtractOperation = new MathOperation(Subtract);
// Gọi các phương thức thông qua delegate
Console.WriteLine("Addition: " + addOperation(10, 5)); // Output: Addition: 15
Console.WriteLine("Subtraction: " + subtractOperation(10, 5)); // Output: Subtraction: 5
}
}
3. Delegate Đa Phương Thức (Multicast Delegate)
Delegate có thể tham chiếu đến nhiều phương thức. Khi gọi delegate, các phương thức được gọi theo thứ tự mà chúng được thêm vào.
public class Program
{
public static void PrintMessage(string message)
{
Console.WriteLine(message);
}
public static void PrintUpperCaseMessage(string message)
{
Console.WriteLine(message.ToUpper());
}
public delegate void MessagePrinter(string message);
public static void Main()
{
MessagePrinter printer = PrintMessage;
printer += PrintUpperCaseMessage;
printer("Hello, Delegates!");
// Output:
// Hello, Delegates!
// HELLO, DELEGATES!
}
}
4. Sử Dụng Delegate Với Anonymous Methods
C# hỗ trợ khai báo các phương thức vô danh (anonymous methods) ngay tại chỗ khi tạo delegate.
public class Program
{
public delegate void GreetDelegate(string name);
public static void Main()
{
GreetDelegate greet = delegate (string name)
{
Console.WriteLine("Hello, " + name);
};
greet("Alice");
// Output: Hello, Alice
}
}
5. Sử Dụng Lambda Expressions Với Delegate
Lambda expressions cung cấp cú pháp ngắn gọn hơn để khai báo các phương thức vô danh.
public class Program
{
public delegate int MathOperation(int x, int y);
public static void Main()
{
MathOperation multiply = (x, y) => x * y;
Console.WriteLine("Multiplication: " + multiply(5, 4));
// Output: Multiplication: 20
}
}
6. Delegate Trong Các Tình Huống Thực Tế
Delegates thường được sử dụng trong các tình huống như callback, event handling, và LINQ. Ví dụ về event handling với delegates:
using System;
public class Button
{
public delegate void ClickHandler();
public event ClickHandler Click;
public void OnClick()
{
if (Click != null)
{
Click();
}
}
}
public class Program
{
public static void Main()
{
Button button = new Button();
button.Click += () => Console.WriteLine("Button was clicked!");
button.OnClick();
// Output: Button was clicked!
}
}
Tóm Lược
Delegates trong C# là một công cụ mạnh mẽ cho phép bạn tạo các phương thức có thể được lưu trữ trong các biến, truyền như các tham số và gọi động. Bằng cách sử dụng delegates, bạn có thể xây dựng các ứng dụng linh hoạt và dễ bảo trì hơn. Các tình huống sử dụng phổ biến bao gồm callback, event handling và LINQ.
Comments