我知道有很多关于通过反射触发事件的问题,但是我没有找到以下问题的答案[我怀疑答案是否定的]:
在给定一个“标准”事件声明的情况下,是否有任何方法可以通过字符串字面量引用来触发事件。
例如,伪代码:
Dim eventName As String = "TestEvent"
RaiseEvent eventName
显然那样行不通。
我可以使用以下代码获取事件处理程序/多路广播委托的类型:
Me.GetType.GetEvent("TestEvent").GetAddMethod.GetParameters(0).Name
// "TestEventEventHandler
但我找不到页面对象上的实例来调用.GetInvocationList
这类似于这个问题:如何从VB.NET中的事件中获取实际的EventHandler委托实例?
然而,这里我特别关注的是通过一个字符串引发事件。
编辑:
在vb.net / webforms环境中有几件事情不同。根据我对接受答案的评论,由于代码后台模型的性质,不可能从Me.GetType()
返回与事件对应的字段,因为在运行时Me
指的是.aspx文件中继承类,而不是.aspx.vb文件中的类。
实际上,这意味着我必须使用Me.BaseType.GetType()
来查找该字段。
第二件与最终答案无关的不同之处在于,在c#中,您可以直接引用事件处理程序MulticastDelegate,而在vb.net中,您不能这样做——或者至少要使用一种不受intellisense支持的未记录功能,如:如何从VB.NET中的事件中获取实际的EventHandler委托实例?