Czy istnieje pewna ukryta właściwość klasy, która pozwoliłaby to wiedzieć?Jak mogę śledzić subskrybentów wydarzenia w języku C#?
Odpowiedz
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
.
- 1. Jak uzyskać subskrybentów wydarzenia?
- 2. Wydarzenia w C++
- 3. Jak mogę wdrożyć IRandomAccessStream w języku C#?
- 4. Jak określić liczbę subskrybentów rozliczeń w aplikacji?
- 5. Jak mogę wyczyścić subskrypcje zdarzeń w języku C#?
- 6. Jak śledzić powtarzające się zdarzenia kalendarza w C#/SQL Server?
- 7. Jak robić wydarzenia w Ruby?
- 8. Jak mogę śledzić postęp pisania AVAssetWriter?
- 9. Wydarzenia/Delegaci W Javie lub C#
- 10. Jak śledzić odsłon w widoku
- 11. Jak mogę uzyskać całkowitą pamięć fizyczną w języku C#?
- 12. Jak mogę uzyskać datę i wersję sterowników w języku C#?
- 13. Jak mogę usunąć obiekt z DbContext w języku C#?
- 14. Jak mogę wykonać polecenie wsadowe bezpośrednio w języku C#?
- 15. Jak mogę sprawdzić identyfikator witryny IIS w języku C#?
- 16. Jak mogę uniknąć niemożliwego stanu boolowskiego w języku C#?
- 17. Jak mogę uzyskać bieżący krótki format DateTime w języku C#?
- 18. Jak mogę tworzyć parametry `out` w języku C#?
- 19. Jak mogę zwinąć wszystkie # regiony i metody w języku C#?
- 20. Jak mogę wdrożyć własną blokadę TaS w języku C#?
- 21. Jak mogę deserializować pikle Pythona w języku C#?
- 22. Anuluj subskrypcję metody anonimowej w języku C#
- 23. Jak mogę śledzić raport o błędzie w Apple Radar?
- 24. Jak mogę śledzić użycie interfejsu API w Symfony2?
- 25. Jak mogę śledzić ścieżkę indeksu przycisku w komórce widoku tabeli?
- 26. Jak mogę śledzić/monitorować otwarte/zamknięte połączenia JMS w Glassfish?
- 27. Facebook API do wysyłania zapytań do moich subskrybentów/subskrybentów
- 28. Wydarzenia YUI AutoComplete, jak?
- 29. Czy mogę śledzić odpowiedź pocztową IMAP?
- 30. rozmnożeniowy wydarzenia z jednej postaci w inną postać w C#
Dzięki za to bardzo jasne wyjaśnienie. – user310291