读书人

关于委托的疑问,该如何解决

发布时间: 2012-02-05 12:07:15 作者: rapoo

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

读书人网 >C#

热点推荐