Как я могу получить фактический экземпляр делегата EventHandler из события в VB.NET? - PullRequest
5 голосов
/ 05 ноября 2010

В C # я мог бы сделать что-то вроде этого:

EventHandler handler = this.SomeEvent;

... что позволило бы мне, например, сделать:

Delegate[] attachedHandlers = handler.GetInvocationList();

В VB.NET,Я не могу понять, как сделать подобное.

Это не работает:

Dim handler As EventHandler = Me.SomeEvent

... из-за следующей ошибки:

Открытое событие SomeEvent (отправитель как объект, e как EventArgs) - это событие, которое не может быть вызвано напрямую.Используйте оператор RaiseEvent, чтобы вызвать событие.

Но это тоже не работает:

Dim handler As EventHandler = AddressOf Me.SomeEvent

..., потому что:

* 1023Операндом 'AddressOf' должно быть имя метода (без скобок).

Так как же на самом деле получить EventHandler из события в VB.NET?Единственная идея, которая сразу приходит на ум, - это использовать рефлексию, но это выглядит довольно нелепо.

Ответы [ 2 ]

6 голосов
/ 05 ноября 2010
   Private Event MyEvent()
   Private delegates() As System.Delegate = MyEventEvent.GetInvocationList()

без документов, найдено здесь

0 голосов
/ 05 ноября 2010

, если вы посмотрите на это Как прикрепить события оригинального объекта к глубоко скопированному клону У меня есть пример кода о том, как получить делегат для события с помощью отражения.Насколько я знаю, это единственный способ сделать это в VB.

...