日期:2014-05-19  浏览次数:20899 次

关于委托的疑问
创建一个委托,并绑定一个实例的方法。然后设置该实例为空,可是该委托还是可执行。为什么?
此时   t   为   null   ,但是   h.Target   不为   null   ,   不知为什么。
当执行了   t   =   null   ;   时,gc   可回收   t   么?

        public   delegate   void   MsgHandler();

        public   class   Test
        {
                public   void   Msg()
                {
                        MessageBox.Show( "Msg ");
                }
        }

在   Form   中   :
                private   void   Form1_Load(object   sender,   EventArgs   e)
                {
                        Test   t   =   new   Test()   ;
                        MsgHandler   h   =   t.Msg;

                        t   =   null;

                        h();     //   依然支持执行
                }

------解决方案--------------------
MsgHandler h = t.Msg; // 把b的值给了a;即a的值现在为b;

t = null; //现在把b的值变成0,但a的值还是b,两者没关系;

h(); //算出a的值。
------解决方案--------------------
t = null 的意思是将t本身的引用设置为null,不是将t所引用对象设置为null
------解决方案--------------------
老师平日总说GC和多线程只在考证时用,实际用的不多。不过这里每天那么多多线程的问题,这又冒个GC出来,看来老师说的也不尽然阿。
------解决方案--------------------
学这玩意儿也用老师 能讲得好就不在学校待着了