Cân nhắc tình huống mà bạn muốn đăng ký một sự kiện cho một sự kiện và chỉ một thông báo. Khi thông báo đầu tiên hạ cánh, bạn hủy đăng ký khỏi tất cả các sự kiện trong tương lai. Mô hình sau sẽ trình bày bất kỳ vấn đề bộ nhớ nào? Nó hoạt động, nhưng tôi đã không chắc chắn nếu đóng cửa tự tham khảo có thể giữ những thứ xung quanh trong bộ nhớ lâu hơn mong muốn.Mẫu sau có thể hủy đăng ký tự của bạn khỏi sự kiện qua việc đóng cửa có gây ra bất kỳ sự cố nào không?
public class Entity
{
public event EventHandler NotifyEvent;
}
// And then, elsewhere, for a listen-once handler, we might do this:
Entity entity = new Entity();
Action<object, EventArgs> listener = null;
listener = (sender, args) =>
{
// do something interesting
// unsubscribe, so we only get 1 event notification
entity.NotifyEvent -= new EventHandler(listener);
};
entity.NotifyEvent += new EventHandler(listener);
Lưu ý rằng bạn phải khai báo 'người nghe' và gán giá trị (null). Nếu không trình biên dịch than phiền về 'Sử dụng biến cục bộ chưa được gán listener
'
Bạn có thể làm cho mã của mình trở nên biểu cảm hơn bằng cách đặt một phần mã của bạn bắt đầu bằng 'Action