IMO, các câu trả lời khác bỏ sót một chi tiết chính - đại biểu đó (và do đó sự kiện) là bất biến. Ý nghĩa của việc này là việc đăng ký hoặc hủy đăng ký trình xử lý sự kiện không chỉ cần thêm/xóa vào danh sách - thay vào đó, nó thay thế danh sách bằng một danh sách mới có mục bổ sung (hoặc ít hơn) trên đó.
Kể từ tài liệu tham khảo là nguyên tử, điều này có nghĩa rằng tại thời điểm bạn làm:
var handler = SomeEvent;
bây giờ bạn có một cứng nhắc dụ rằng không thể thay đổi, ngay cả khi ở pico giây tiếp theo khác unsubscribes ren (gây ra thực tế trường sự kiện để trở thành null
).
Vì vậy, bạn thử nghiệm cho null và gọi nó, và tất cả là tốt. Lưu ý tất nhiên là có vẫn còn kịch bản khó hiểu của sự kiện là đã tăng trên một đối tượng nghĩ rằng nó đã hủy đăng ký một picosecond trước đây!
Nguồn
2010-04-06 04:06:46
Đọc qua các câu trả lời đầy đủ, dự kiến ở đây tôi hiểu được rằng xử lý sự kiện trong C# được kết hợp chặt chẽ, dễ bị lỗi và không được hiểu rõ. – micahhoover