×

Xây Dựng và Sử Dụng Sự Kiện trong C#

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 event và 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