在C#中,我可以这样做:
EventHandler handler = this.SomeEvent;
...这将允许我做,例如:
Delegate[] attachedHandlers = handler.GetInvocationList();
在VB.NET中,我似乎无法弄清楚如何做类似的事情。
这不起作用:
Dim handler As EventHandler = Me.SomeEvent
...由于以下错误:
公共事件SomeEvent(发件人As Object,e As EventArgs)'是一个事件, 并且不能直接调用。用一个 'RaiseEvent'声明提出一个 事件
但这也不起作用:
Dim handler As EventHandler = AddressOf Me.SomeEvent
...因为:
'AddressOf'操作数必须是方法的名称(没有括号)。
那么我如何从VB.NET中的事件中获得EventHandler
呢?立即想到的唯一想法是使用反射,但这看起来很荒谬。
答案 0 :(得分:6)
Private Event MyEvent()
Private delegates() As System.Delegate = MyEventEvent.GetInvocationList()
未记录,发现here
答案 1 :(得分:0)
如果你看看这个How to Attach the Events of an Original Object to a Deep Copied Clone我有一个关于如何通过反射获取事件委托的代码示例。据我所知,它是在VB中实现它的唯一方法。