日期:2014-05-18  浏览次数:20841 次

关于delegate的一点疑问
我在一个delegate上面绑定一个对象的实例方法之后,那么这个对象有没有可能被释放和垃圾收集呢??
比如,有如下代码

CTest ct = new CTest() // 这是一个类,里面有个叫做CTPrint的实例方法

MyDelType d = new MyDelType(ct.CTPrint);
d();

ct = null;
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();

d();

其中我进行了一个垃圾收集,按理说在将ct=null之后ct不是应该被垃圾回收的吗??难道是因为delegate引用到他的原因??
谢谢


------解决方案--------------------
你既然绑定了,怎么会给你释放了吗
------解决方案--------------------
不要轻易尝试调用GC.Collect()回收

绑定委托之后 内部肯定有对该对象的引用
------解决方案--------------------
GC.Collect()也不是立即释放,你的类可以试试实现IDisposable接口方法。
------解决方案--------------------
探讨
不要轻易尝试调用GC.Collect()回收

绑定委托之后 内部肯定有对该对象的引用

------解决方案--------------------
绑定委托后确实会保留引用,所以.Net 4.5弄了个弱事件模式来解决这个问题。