大家都知道只有在定义事件的类中才能触发事件 今天看到一个资料上说就是在定义事件的类的嵌套类中也不能触发事件!为了搞清楚原因我进行了如下测试 class Program { static void Main(string[] args) { MyClassTest t = new MyClassTest(); tFunc(); } } public class MyClass { public delegate void MyEventHandler(object senderEventArgs e); public event MyEventHandler MyEvent; public class Test { public void Func() { MyClass a = new MyClass(); object o = new object(); EventArgs e = new EventArgs(); aMyEvent(o e); //在嵌套类中尝试触发事件编译可以通过运行时候却抛出NullReferenceException异常 } } } 熟悉NET底层原理的人都知道事件成员在编译的时候实际是生成一个私有的委托字段和两个方法(一个add_MyEvent方法负责向委托链添加委托的实例还有一个remove_MyEvent方法作用刚好相反) 按照常规的想法是能够通过嵌套类来访问外部类的私有成员的也就是说在嵌套类中应该是可以触发外部类定义的事件的 真是汗颜啊!无地自容了在这里向大家道歉! 昨天的代码忘记订阅事件了!太低级了啊! 结论嵌套类中应该是可以触发外部类定义的事件的! 感谢大家参与讨论!上面的文章已经更正!谢谢大家啊! |