通过反射创建的实例没有调用eventlistener
本文关键字:调用 eventlistener 实例 反射 创建 | 更新日期: 2023-09-27 18:03:49
道歉有个错别字…编辑…
我有一个奇怪的问题,我不确定。
在一段代码中,我有一个类,它被称为单例类,它有一个事件,其他类可以监听,非常简单,像
Client.Instance.MyEvent += new EventHandler<EventArgs>(myHandler);
如果我有一个泛型类:
Class MyTest {
public MyTest() {
System.Console.WriteLine("In Constructor Registering Events");
Client.Instance.MyEvent += new EventHandler<EventArgs>(myHandler);
}
private void myHandler(object sender, EventArgs arg) {
System.Console.WriteLine("Got event!");
}
}
现在如果我创建这样的类:
MyTest mC = new MyTest ();
Client.Instance.FireEvent();
我得到了预期的"在构造函数中注册事件"answers"得到事件"
但是,如果我通过反射创建类,我不这样做。
Type mType = typeof(MyTest);
object mT = Activator.CreateInstance(mType);
Client.Instance.FireEvent();
所有我得到的是"在构造函数注册事件",但我没有得到事件触发消息。这是怎么回事?我在反射调用中做了一些错误的事情吗?
谢谢——
我刚刚测试了您的声明,并且使用适当的类型,无论使用new
还是通过反射创建对象,它的工作原理都是一样的。
下面的工作演示可以在这里测试
public class Program
{
public static void Main(string[] args)
{
Client.Instance.MyEvent += delegate { Console.WriteLine("MY EVENT handled from Main"); };
MyTest mt = new MyTest();
Type mType = typeof(MyTest);
object reflectedMT = Activator.CreateInstance(mType);
Client.Instance.FireEvent();
}
}
public class Client {
private Client() {}
private static Client _inst = new Client();
public static Client Instance { get { return _inst; } }
public void FireEvent() { if(MyEvent != null) MyEvent(this, EventArgs.Empty); }
public event EventHandler<EventArgs> MyEvent;
}
public class MyTest {
public MyTest() {
System.Console.WriteLine("In Constructor Registering Events");
Client.Instance.MyEvent += new EventHandler<EventArgs>(myHandler);
}
private void myHandler(object sender, EventArgs arg) {
System.Console.WriteLine("Got event!");
}
}