177 c# destructor
例如:
public class Person
{
public Person()
{
}
~Person()
{
}
}
Run Code Online (Sandbox Code Playgroud)
我什么时候应该手动创建析构函数?什么时候需要创建析构函数?
Eri*_*ert 229
更新:这个问题是我2015年5月的博客主题.谢谢你这个好问题!请参阅博客,了解人们通常认为最终确定的一长串谎言.
我什么时候应该手动创建析构函数?
几乎从不.
通常,当您的类持有一些昂贵的非托管资源时,只会创建一个析构函数,当对象消失时必须清除这些资源.最好使用一次性模式以确保清理资源.然后,析构函数基本上是一种保证,即如果对象的使用者忘记处置它,那么资源最终仍会得到清理.(也许.)
如果你让析构函数非常小心并理解垃圾收集器是如何工作的.析构函数真的很奇怪:
在析构函数中几乎没有什么通常是正确的.真的,非常小心.编写正确的析构函数非常困难.
什么时候需要创建析构函数?
测试处理析构函数的编译器部分时.我从来不需要在生产代码中这样做.我很少编写操纵非托管资源的对象.
Nic*_*oiu 17
它被称为"终结器",您通常只应为其状态(即:字段)包含非托管资源的类创建一个(即:通过p/invoke调用检索的句柄指针).但是,在.NET 2.0及更高版本中,实际上有更好的方法来处理非托管资源的清理:SafeHandle.鉴于此,您几乎不需要再次编写终结器.
除非您的类维护非文件资源(如Windows文件句柄),否则您不需要一个.
它被称为析构函数/终结器,通常在实现 Disposed 模式时创建。
当您的类的用户忘记调用 Dispose 以确保(最终)您的资源被释放时,这是一个后备解决方案,但您无法保证何时调用析构函数。
在这个Stack Overflow 问题中,接受的答案正确显示了如何实现处置模式。仅当您的类包含垃圾收集器无法自行清理的任何未处理资源时才需要这样做。
一个好的做法是不实现终结器,同时也给类的用户提供手动处置对象以立即释放资源的可能性。