如何将事件和反射联系起来
本文关键字:反射 联系 起来 事件 | 更新日期: 2023-09-27 18:21:28
请参阅下面的示例。我需要将通过反射获得的DoSomething方法连接到事件。
class Program {
private static event EventHandler MyEvent;
static void Main(string[] args)
{
object aType = new SomeType();
var type = aType.GetType();
var method = type.GetMethod("DoSomething");
if (method != null)
{
MyEvent += method;//How do I wire this up?
}
}
}
public class SomeType {
public void DoSomething() {
Debug.WriteLine("DoSomething ran.");
}
}
您需要创建一个委托:
MyEvent += (EventHandler)Delegate.CreateDelegate(typeof(EventHandler), aType, method);
第二个参数是要将委托绑定到的实例。
有关更多信息,请参阅我的博客。
与任何其他委托一样,只有当目标方法具有与委托相同的签名(参数类型)时,这才会起作用。
实际上,不能将DoSomething
用作MyEvent
的处理程序,因为它没有正确的签名。假设您将DoSomething
的签名更改为:
public void DoSomething(object sender, EventArgs e)
你可以订阅这样的活动:
if (method != null)
{
var dlg = (EventHandler)Delegate.CreateDelegate(typeof(EventHandler), aType, method);
MyEvent += dlg;
}