c#控件清除前需要单独解绑其事件属性上绑定的函数吗?为什么? 问一句,设置为null的话,上边的代码不会出错么? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 设置为null只是解除了一个引用,不代表控件被销毁。控件使用了非托管资源,有析构方法,如果不主动Dispose,等到所有引用都解除,GC会把它放到析构队列,最后执行析构之后才是真正销毁。这个过程可能很久。如果确定要销毁,应该主动调用Dispose,而不是设置成null。你看到的代码里,如果是这个控件在别处还有使用,只是这里不再需要,那么解绑是应该的。如果把这个引用当作一个标志,自己的逻辑需要判断它,那么设置null是合理的。如果这个代码是属于销毁的逻辑,那么设置null不必要。关于事件绑定,如果把短生命周期的对象挂接在长生命周期的对象的事件上,不解绑的话会导致这些短生命周期的对象无法释放,直到绑定的长生命周期对象释放,它们才能释放。所以一般规则是,短生命周期的对象销毁的逻辑里需要把挂接在长生命周期的对象的事件解绑。否则会造成内存泄漏。而关于设置null这个话题,这里有详细的分析。 引用自身方法是不需要特地去释放的,如form.Designer里面的事件绑定,你也没见到有解绑的操作。需要手动解绑除了上面说的引用了其它类中的方法,还有是用自身方法去注册了一个全局的事件。如果注册了Application.ApplicationExit事件。另:在Dispose的时候写tabPageManager = null;其实是没必要的,详见《编写高质量代码:改善C#程序的151个建议》第4章。Release编译时IL是直接忽略这段代码的。 多谢楼上各位的回答,关于null的使用真是涨姿势了。英文文章好难啃啊,能介绍一篇中文的博文吗 为什么给文本框设置了验证表达式(requirefieldvalidator)以后,原先文本框旁边用来点击日历的按钮不管用了 设置透明色问题,50分在线等~~~ 关于循环日期的问题 怎么把程序中自定义的临时表拷贝回数据庫 如何打开一个文本文件? .Net Remoting 都做什么样的项目,工资水平怎么样???? 报表汇总问题! 怎样实现cookie的多次写入 VS C# 2010 chart控件问题 思归请进!!!:) 同样是另存为,为什么对话框样子不一样 委托函数
引用自身方法是不需要特地去释放的,如form.Designer里面的事件绑定,你也没见到有解绑的操作。
需要手动解绑除了上面说的引用了其它类中的方法,还有是用自身方法去注册了一个全局的事件。如果注册了Application.ApplicationExit事件。另:在Dispose的时候写tabPageManager = null;其实是没必要的,详见《编写高质量代码:改善C#程序的151个建议》第4章。
Release编译时IL是直接忽略这段代码的。
英文文章好难啃啊,能介绍一篇中文的博文吗