我有一个担忧。我是计算机科学专业的一年级学生。通常我在课堂上很好奇,但老师并不总是有答案,或者并不总是知道答案。 C# 中析构函数有必要吗?我的意思是,如果我必须像通常对构造函数那样实现析构函数方法,这是一个好的做法还是我可以避免它并且垃圾收集器会为我做这件事?
语言中拥有析构函数(或终结器)是件好事 - 但你几乎应该never使用它们。基本上,只有当您有direct处理非托管资源,这不仅非常罕见,而且使用SafeHandle http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.safehandle%28v=vs.110%29.aspx因为无论如何,少量的间接都是一个更好的主意(它可以为您处理清理工作)。看乔·达菲 (Joe Duffy) 关于该主题的博客文章 http://joeduffyblog.com/2005/12/27/never-write-a-finalizer-again-well-almost-never/更多细节。
不管怎样,除了测试一些奇怪的行为或其他行为之外,我不记得上次编写终结器是什么时候了。
在绝大多数时候,生活更简单:
- 垃圾收集器可以处理内存资源清理
- 如果您在方法中本地使用非托管资源(例如文件),请使用
using
声明以确保您在完成后释放它
- 如果您需要对非托管资源(或任何其他实现
IDisposable
) as an 实例变量在你的类型中,你的类型本身应该实现IDisposable
。 (我尽量避免这种情况。即使它is必要的,你可以通过让你的课程让生活变得更简单sealed
,此时您至少不需要担心其他子类有更多的非托管状态需要清理。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)