关于委托的疑问
创建一个委托,并绑定一个实例的方法。然后设置该实例为空,可是该委托还是可执行。为什么?
此时 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出来,看来老师说的也不尽然阿。
------解决方案--------------------学这玩意儿也用老师 能讲得好就不在学校待着了