2011-02-06 10 views

Odpowiedz

18

Jeśli masz dostęp do aktualnego delegata (jeśli używasz składni skrótowym event, to jest tylko w obrębie samej klasie stwierdzającej, jako delegat jest private), to można zadzwonić GetInvocationList().

Na przykład:

public event EventHandler MyEvent; 

Aby uzyskać listę abonentów, można zadzwonić:

Delegate[] subscribers = MyEvent.GetInvocationList(); 

Następnie można skontrolować Method i Target właściwości każdego elementu tablicy subscribers, jeśli niezbędny.

Powodem tego działania jest dlatego deklarowania zdarzenia jak zrobiliśmy powyżej faktycznie robi coś podobnego do tego:

private EventHandler myEventDelegate; 

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

Dlatego zdarzenie wygląda inaczej, patrząc od wewnątrz klasy uznającej porównaniu do dowolnego miejsca else (w tym klasy, które dziedziczą z niego). Jedynym publicznym interfejsem jest funkcja add i remove; faktyczny pełnomocnik, który jest właścicielem subskrypcji, to private.

+0

Dzięki za to bardzo jasne wyjaśnienie. – user310291

Powiązane problemy