C# 如何将事件与反射关联起来
见下面的示例。我需要将通过对事件的反射获得的剂量测量方法连接起来C# 如何将事件与反射关联起来,c#,reflection,C#,Reflection,见下面的示例。我需要将通过对事件的反射获得的剂量测量方法连接起来 class Program { private static event EventHandler MyEvent; static void Main(string[] args) { object aType = new SomeType(); var type = aType.GetType(); var method = type.GetM
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;
}
您还需要将CreateDelegate的结果强制转换为EventHandler感谢您的快速响应。这很有帮助。