event là một lớp bọc bảo vệ quanh một delegate. Bản thân delegate là "kiểu" giữ danh sách method; event thêm giới hạn quyền truy cập để đóng gói mô hình publisher/subscriber.
Từ bên ngoài class khai báo, với một event bạn chỉ làm được:
- += để đăng ký, -= để hủy đăng ký.
Bạn không thể:
- Gán đè = (xóa sạch mọi subscriber của người khác).
- Kích hoạt (raise) event từ ngoài — chỉ chính class chủ mới được gọi.
csharp
public event EventHandler? Saved; // ngoài class chỉ được += / -=
// còn delegate public thì ai cũng gọi được, gán = được → mất kiểm soátChốt: delegate là cơ chế; event là hợp đồng an toàn dựng trên delegate — publisher độc quyền phát tín hiệu, subscriber chỉ được lắng nghe.
Đây là lý do API .NET công khai event chứ không công khai delegate field trần.