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