Hướng dẫn入门: Sự kiện trong C

Xin chào các bạn đang học lập trình! Hôm nay, chúng ta sẽ khám phá thế giới đầy thú vị của các sự kiện trong C#. Là người giáo viên máy tính gần gũi của bạn, tôi sẽ hướng dẫn bạn từng bước trong hành trình này. Đừng lo lắng nếu bạn là người mới bắt đầu lập trình - chúng ta sẽ bắt đầu từ những điều cơ bản và dần dần nâng cao. Hãy cùng bắt đầu nhé!

C# - Events

什么是事件 (Events)?

Hãy tưởng tượng bạn đang dự tiệc và chờ bạn của bạn đến. Khi họ đến, bạn muốn chào đón họ. Trong C#, các sự kiện hoạt động tương tự - chúng là cách để các đối tượng thông báo cho các đối tượng khác khi có điều gì đó thú vị xảy ra. Đó giống như thiết lập một "hệ thống thông báo" trong mã của bạn.

So sánh với thế giới thực

Hãy nghĩ về các sự kiện như một chuông cửa. Khi ai đó bấm chuông (sự kiện), bạn (người xử lý sự kiện) phản hồi bằng cách đi đến cửa. Chuông cửa không biết hoặc quan tâm ai sẽ phản hồi - nó chỉ thông báo rằng có ai đó đang ở cửa.

Sử dụng Delegate với Sự kiện

Trước khi chúng ta nhảy vào các sự kiện, chúng ta cần hiểu về delegate. Đừng lo lắng; chúng không đáng sợ như bạn nghĩ!

什么是Delegate?

Delegate trong C# giống như một người trung gian. Chúng giữ tham chiếu đến các phương thức (hàm) và có thể gọi các phương thức đó khi cần thiết. Hãy nghĩ về một delegate như một danh thiếp phức tạp không chỉ có thông tin liên hệ mà còn có thể gọi điện thoại cho bạn!

Hãy xem một ví dụ đơn giản về delegate:

public delegate void SimpleDelegate(string message);

class Program
{
static void Main(string[] args)
{
SimpleDelegate d = new SimpleDelegate(ShowMessage);
d("Hello, Delegates!");
}

static void ShowMessage(string message)
{
Console.WriteLine(message);
}
}

Trong ví dụ này, SimpleDelegate là loại delegate của chúng ta. Chúng ta tạo một thể hiện của nó (d) và liên kết nó với phương thức ShowMessage. Khi chúng ta gọi d("Hello, Delegates!"), thực tế nó đang gọi ShowMessage("Hello, Delegates!").

Khai báo Sự kiện

Bây giờ chúng ta đã hiểu về delegate, hãy xem cách sự kiện hoạt động. Các sự kiện thường được khai báo sử dụng delegate. Đây là cú pháp cơ bản:

public event DelegateType EventName;

Hãy tạo một ví dụ thực tế hơn. Giả sử chúng ta đang xây dựng một ứng dụng ngân hàng đơn giản:

public class BankAccount
{
private decimal balance;
public delegate void BalanceChangedEventHandler(decimal newBalance);
public event BalanceChangedEventHandler BalanceChanged;

public decimal Balance
{
get { return balance; }
set
{
balance = value;
OnBalanceChanged(balance);
}
}

protected virtual void OnBalanceChanged(decimal newBalance)
{
BalanceChanged?.Invoke(newBalance);
}
}

Trong ví dụ này, chúng ta đã tạo một lớp BankAccount với sự kiện BalanceChanged. Mỗi khi số dư thay đổi, sự kiện này sẽ được kích hoạt.

Ví dụ: Kết hợp tất cả lại với nhau

Hãy xem cách chúng ta có thể sử dụng lớp BankAccount với sự kiện của nó:

class Program
{
static void Main(string[] args)
{
BankAccount account = new BankAccount();
account.BalanceChanged += Account_BalanceChanged;

account.Balance = 1000;
account.Balance = 2000;
account.Balance = 500;
}

private static void Account_BalanceChanged(decimal newBalance)
{
Console.WriteLine($"Your new balance is: ${newBalance}");
}
}

Khi bạn chạy chương trình này, bạn sẽ thấy:

Your new balance is: $1000
Your new balance is: $2000
Your new balance is: $500

Phân tích

  1. Chúng ta tạo một đối tượng BankAccount.
  2. Chúng ta đăng ký sự kiện BalanceChanged của nó bằng cách sử dụng toán tử +=.
  3. Chúng ta thay đổi số dư ba lần.
  4. Mỗi khi số dư thay đổi, phương thức Account_BalanceChanged của chúng ta sẽ được gọi tự động.

Đây là phép màu của sự kiện! Lớp BankAccount không cần biết ai đang lắng nghe sự thay đổi của nó. Nó chỉ cần thông báo, và bất kỳ ai quan tâm đều có thể lắng nghe và phản ứng.

Các Mẫu Sự kiện Thường Gặp

Dưới đây là một số mẫu thường gặp mà bạn sẽ thấy với các sự kiện trong C#:

Mẫu Mô tả Ví dụ
EventHandler Mẫu sự kiện chuẩn public event EventHandler MyEvent;
Custom EventArgs Để truyền dữ liệu tùy chỉnh public event EventHandler<CustomEventArgs> MyEvent;
Event Accessor Để kiểm soát truy cập sự kiện public event EventHandler MyEvent { add { ... } remove { ... } }

Kết luận

Sự kiện trong C# là một cách mạnh mẽ để tạo ra các ứng dụng loosely coupled, nhạy cảm. Chúng cho phép các đối tượng giao tiếp mà không cần biết chi tiết của nhau, giống như một đài phát thanh phát sóng đến bất kỳ ai đang lắng nghe.

Nhớ rằng, thực hành là cách tốt nhất để trở nên hoàn hảo! Hãy thử tạo ra các lớp của riêng bạn với sự kiện và thử nghiệm với các kịch bản khác nhau. Trước khi bạn biết, bạn sẽ trở thành một chuyên gia về sự kiện, chỉ huy một dàn nhạc của các đối tượng trong các ứng dụng C# của bạn!

Chúc các bạn may mắn trong việc lập trình! ??

Credits: Image by storyset