2011-02-06 33 views

Trả lời

18

Nếu bạn có quyền truy cập vào các đại biểu thực tế (nếu bạn đang sử dụng cú pháp tốc ký event, thì đây là chỉ trong lớp học tuyên bố thực tế, như các đại biểu là private), sau đó bạn có thể gọi GetInvocationList().

Ví dụ:

public event EventHandler MyEvent; 

Để có được danh sách các thuê bao, bạn có thể gọi:

Delegate[] subscribers = MyEvent.GetInvocationList(); 

Sau đó, bạn có thể kiểm tra việc MethodTarget thuộc tính của mỗi phần tử của mảng subscribers, nếu cần thiết.

Lý do làm việc này là vì tuyên bố sự kiện này như chúng ta đã làm ở trên thực làm điều gì đó tương tự như thế này:

private EventHandler myEventDelegate; 

public event EventHandler MyEvent 
{ 
    add { myEventDelegate += value; } 
    remove { myEventDelegate -= value; } 
} 

Đây là lý do tại sao sự kiện này trông khác nhau khi nhìn từ bên trong lớp tuyên bố so với bất cứ nơi nào khác (bao gồm cả các lớp kế thừa từ nó). Giao diện công khai duy nhất là chức năng addremove; đại biểu thực tế, là những gì chứa đăng ký, là private.

+0

Cảm ơn lời giải thích rất rõ ràng này. – user310291

Các vấn đề liên quan