Các sự kiện (events) và các bộ phát sự kiện (event handlers) trong C# cho phép bạn xây dựng các ứng dụng phản ứng lại các hành động hoặc thay đổi trạng thái. Đây là một phần quan trọng trong lập trình hướng đối tượng và được sử dụng rộng rãi trong các ứng dụng Windows Forms, WPF, ASP.NET và nhiều ứng dụng khác.
1. Khái Niệm Cơ Bản
- Sự Kiện (Event): Một thông báo rằng một điều gì đó đã xảy ra. Sự kiện được khai báo trong một lớp và được kích hoạt (fired) bởi đối tượng của lớp đó.
- Bộ Phát Sự Kiện (Event Handler): Một phương thức được gọi khi một sự kiện xảy ra. Nó chứa mã xử lý sự kiện.
2. Tạo và Sử Dụng Sự Kiện
Bước 1: Khai Báo Sự Kiện
Để khai báo một sự kiện trong C#, bạn cần sử dụng từ khóa event và một delegate. Delegate định nghĩa kiểu phương thức nào có thể xử lý sự kiện đó.
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);
public class Publisher
{
// Khai báo sự kiện
public event EventHandler<EventArgs> RaiseEvent;
// Phương thức để kích hoạt sự kiện
protected virtual void OnRaiseEvent(EventArgs e)
{
// Kiểm tra xem có bộ phát sự kiện nào đã được đăng ký
if (RaiseEvent != null)
{
RaiseEvent(this, e);
}
}
// Phương thức mô phỏng một hành động nào đó xảy ra
public void DoSomething()
{
// Kích hoạt sự kiện
OnRaiseEvent(EventArgs.Empty);
}
}
Bước 2: Đăng Ký Bộ Phát Sự Kiện
Một lớp khác có thể đăng ký để nhận thông báo khi sự kiện được kích hoạt.
public class Subscriber
{
public void OnEventRaised(object sender, EventArgs e)
{
Console.WriteLine("Event was raised.");
}
}
class Program
{
static void Main(string[] args)
{
Publisher publisher = new Publisher();
Subscriber subscriber = new Subscriber();
// Đăng ký bộ phát sự kiện với sự kiện
publisher.RaiseEvent += subscriber.OnEventRaised;
// Thực hiện hành động nào đó
publisher.DoSomething(); // Output: "Event was raised."
}
}
3. Sử Dụng Các EventArgs Tùy Chỉnh
Đôi khi, bạn muốn truyền thêm thông tin khi sự kiện xảy ra. Để làm điều này, bạn có thể tạo một lớp dẫn xuất từ EventArgs và sử dụng nó trong sự kiện.
// Định nghĩa lớp EventArgs tùy chỉnh
public class CustomEventArgs : EventArgs
{
public int Value { get; private set; }
public CustomEventArgs(int value)
{
Value = value;
}
}
public class Publisher
{
public event EventHandler<CustomEventArgs> RaiseCustomEvent;
protected virtual void OnRaiseCustomEvent(CustomEventArgs e)
{
if (RaiseCustomEvent != null)
{
RaiseCustomEvent(this, e);
}
}
public void DoSomething(int value)
{
OnRaiseCustomEvent(new CustomEventArgs(value));
}
}
public class Subscriber
{
public void OnCustomEventRaised(object sender, CustomEventArgs e)
{
Console.WriteLine($"Event was raised with value: {e.Value}");
}
}
class Program
{
static void Main(string[] args)
{
Publisher publisher = new Publisher();
Subscriber subscriber = new Subscriber();
publisher.RaiseCustomEvent += subscriber.OnCustomEventRaised;
publisher.DoSomething(42); // Output: "Event was raised with value: 42"
}
}
4. Hủy Đăng Ký Bộ Phát Sự Kiện
Để hủy đăng ký một bộ phát sự kiện, bạn sử dụng toán tử -=:
publisher.RaiseEvent -= subscriber.OnEventRaised;
Tổng Kết
- Sự kiện (event): Cho phép các đối tượng giao tiếp với nhau khi một hành động nào đó xảy ra.
- Bộ phát sự kiện (event handler): Là phương thức được gọi khi sự kiện xảy ra.
- Khai báo và kích hoạt sự kiện: Sử dụng từ khóa
eventvà delegate. - Đăng ký và hủy đăng ký: Sử dụng toán tử
+=để đăng ký và-=để hủy đăng ký bộ phát sự kiện.
Bằng cách sử dụng các sự kiện và bộ phát sự kiện trong C#, bạn có thể xây dựng các ứng dụng phản ứng linh hoạt và dễ bảo trì hơn.
Comments