zoukankan      html  css  js  c++  java
  • 在嵌套类中是否可以触发外部类中定义的事件!

    大家都知道,只有在定义事件的类中才能触发事件。

    今天看到一个资料上说就是在定义事件的类的嵌套类中也不能触发事件!为了搞清楚原因,我进行了如下测试:

     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方法,作用刚好相反);

    按照常规的想法,是能够通过嵌套类来访问外部类的私有成员的,也就是说在嵌套类中应该是可以触发外部类定义的事件的。

    真是汗颜啊!无地自容了,在这里向大家道歉!

    昨天的代码忘记订阅事件了!太低级了啊!

    结论:嵌套类中应该是可以触发外部类定义的事件的!

    感谢大家参与讨论!上面的文章已经更正!谢谢大家啊!


  • 相关阅读:
    洛谷 P6851 【onu】贪心
    联赛模拟测试12 C. sum 莫队+组合数
    晚间测试4 哪一天她能重回我身边 神奇建图+基环树
    联赛模拟测试11 D. 甜圈 线段树维护哈希值
    CF741D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths 树上启发式合并(DSU ON TREE)
    CF788B Weird journey 题解
    联赛模拟测试10 C. 射手座之日
    晚间测试3 B. 单(single)
    CF538B Quasi Binary 思维题
    CF600E Lomsat gelral 树上启发式合并
  • 原文地址:https://www.cnblogs.com/xuefeng1982/p/1393208.html
Copyright © 2011-2022 走看看