关于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接口方法。
------解决方案--------------------
------解决方案--------------------绑定委托后确实会保留引用,所以.Net 4.5弄了个弱事件模式来解决这个问题。