【发布时间】:2014-12-17 14:43:22
【问题描述】:
我意识到有许多问题涉及通过反射引发事件,但是我无法找到以下问题的答案 [我怀疑答案是否定的]:
给定一个事件的“标准”声明,有没有办法通过引用字符串文字来引发事件。
例如伪代码:
Dim eventName As String = "TestEvent"
RaiseEvent eventName
显然这行不通。
我可以通过
获取事件处理程序/多播委托的类型Me.GetType.GetEvent("TestEvent").GetAddMethod.GetParameters(0).Name
// "TestEventEventHandler
但是我在页面对象上找不到this的实例来调用.GetInvocationList
这类似于这个问题:How can I get an actual EventHandler delegate instance from an event in VB.NET?
但是,我在这里专门研究从字符串引发事件。
编辑:
在 vb.net/webforms 环境中有一些不同之处。根据我对已接受答案的评论,由于(我相信)代码隐藏模型的性质,不可能从 Me.GetType() 返回与事件对应的字段,因为在运行时 Me 指的是继承.aspx 文件中的类而不是 .aspx.vb 文件中的类。
实际上这意味着我必须使用Me.BaseType.GetType() 来查找该字段。
第二点不同,虽然与最终答案无关,但在 c# 中您可以直接引用事件处理程序 MulticastDelegate,但在 vb.net 中您不能 - 或者至少,您不能这样做必须使用智能感知不支持的未记录功能,如:How can I get an actual EventHandler delegate instance from an event in VB.NET?
【问题讨论】:
-
我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
-
好的,谢谢。不过,我在这里有一个问题 - 这具体是一个 vb.net/asp.net 问题,因为 c#/winforms 的解决方案与 vb.net/webforms 的解决方案不同。我应该在标题中还是仅在问题中反映问题的这个必要元素?我觉得暗示这个问题是一个通用的“.net events via reflection”问题是一种误导。
-
现在我已经编辑了问题以反映 webforms/vb.net 带来的困难
-
重新阅读您链接到的主题后,我已经更新了标题。你觉得这样更合适吗?
-
好多了。您已将元数据转化为数据。
标签: asp.net .net vb.net events reflection