0

道歉有一个错字...已编辑...

我有一个奇怪的问题,我不确定。

在一段代码中,我有一个称为单例的类,它有一个其他类可以监听的事件,通过执行类似的操作非常简单

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();

我得到了预期的“在构造函数中注册事件”和“得到事件”

但是,如果我通过反射创建类,我不会。

Type mType = typeof(MyTest);
object mT = Activator.CreateInstance(mType);
Client.Instance.FireEvent();

我得到的只是“在构造函数中注册事件”,但我没有收到事件触发消息。这里发生了什么?我在反射调用中做错了什么吗?

谢谢 -

4

1 回答 1

0

我刚刚测试了您的声明,并且使用正确的类型,无论对象是使用反射创建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!");
   }
}
于 2013-03-13T19:03:43.690 回答