当前位置:  开发笔记 > 编程语言 > 正文

.NET中的Finalize和Dispose方法有什么意义?(回答前详情)

如何解决《.NET中的Finalize和Dispose方法有什么意义?(回答前详情)》经验,为你挑选了1个好方法。

我需要在拆除对象时清理资源,但我总是发现Dispose,Finalize和析构函数方法之间的区别有点令人困惑.

我发现这篇精彩的文章简明扼要地描述了它们之间的区别,我将不得不保存以备将来参考:
"Destructor,Dispose和Finalize方法之间的区别" - Sanjay Saini http://sanjaysainitech.blogspot.com/2007/ 06 /差之间-析构函数-dispose.html

我在这里要问的根本问题是这个.

如果一种语言提供析构函数(例如C#[refuted]),DisposeFinalize会将哪个值添加到等式中?

我只是一个习惯于以旧学校方式在破坏者中做所有事情的笨蛋,或者是否有一些我想念的东西只能通过将一个物体拆成三部分来实现?

更新:
如某些回复中所述,C#实际上并没有析构函数.在这一点上,这个问题可能没有实际意义.当我在上面引用的文章中读到C#实际上有一个单独的解构器(显然是一个错误)时,它把我扔了一个循环,我开始想知道如果你有一个最终的析构函数来包装所有内容,Dispose和Finalize的意义是什么.我想在像C#这样的GC语言中,为对象提供denemount的单个析构函数的概念没有多大意义.

很抱歉你们中的一些人,但有几个人没有仔细阅读这个问题,并认为我在询问Dispose和Finalize之间的区别,这真的不是重点.



1> Brian Genisi..:

该博客文章的作者有点困惑......

在C#中,没有"析构函数"这样的东西.只有终结者和IDisposable.

~ClassName()方法不称为"析构函数".它被称为终结者.

处置存在是为了从代码中释放资源,其中存在从GC调用终结器.通常,终结器会调用Dispose()方法,但"Dispose Pattern"会将您设置为仅处理终结器中的非托管资源.

你看,当调用终结器时,你在一个不同的线程上,你拥有的任何托管对象都不一定有效.因此,如果从终结器中调用Dispose(),则应该调用Dispose(false),它告诉"Dispose Pattern"仅处理非托管资源.

此外,"Dispose Pattern"表示调用Dispose(true)时,应该抑制该对象的终结器.

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有