C# 在c中,B/w处理和最终确定方法的区别是什么#

C# 在c中,B/w处理和最终确定方法的区别是什么#,c#,.net,C#,.net,我发现许多文章和表单定义了b/w finalize和dispose方法的区别,但现在我仍然有一个疑问,那就是。 疑问:我们知道在运行时类的析构函数会转换为finalize方法。如果我们不在类中定义析构函数会发生什么。我的意思是直到现在析构函数是否会转换成finalize。内存管理现在将如何执行。在实现IDisposable的类上存在一个Dispose方法(我想您可以在没有接口的情况下使用一个,但它没有那么有用)。在这种方法中,您应该清理所有未管理的资源。它还: 允许您在对象周围放置using块,

我发现许多文章和表单定义了b/w finalize和dispose方法的区别,但现在我仍然有一个疑问,那就是。
疑问:我们知道在运行时类的析构函数会转换为finalize方法。如果我们不在类中定义析构函数会发生什么。我的意思是直到现在析构函数是否会转换成finalize。内存管理现在将如何执行。

在实现
IDisposable
的类上存在一个
Dispose
方法(我想您可以在没有接口的情况下使用一个,但它没有那么有用)。在这种方法中,您应该清理所有未管理的资源。它还:

  • 允许您在对象周围放置
    using
    块,以便框架为您调用
    Dispose
  • 让用户知道,在让对象超出范围之前,他们可能应该调用
    Dispose

  • 一个终结器(它看起来像C++析构函数)被垃圾回收器调用…最终。考虑到在调用它时缺乏控制,您应该非常小心地避免依赖它们。一点也不麻烦(绝大多数,几乎所有的班级都不需要它们)。此外,如果您实现了

    IDisposable
    ,您肯定不需要它,因为在终结器运行之前,非托管资源应该已经被释放(并且调用了
    GC.SuppressFinalize
    )。

    通常,实现了
    IDisposable
    的类对析构函数没有任何用处。总是建议在处理时调用
    GC.SuppressFinalize(this)
    ,这样垃圾收集器就不会试图调用终结器(可能还会释放已经释放的资源)@MatiCicero谢谢,包括这一点。“我们知道在运行时类的析构函数会转换为finalize方法”-你有任何解释的链接吗?(因为它发生在编译时,我想你找不到一篇…)既然你说你已经看过很多文章(可能包括建议的副本),你能不能也澄清一下你到底想理解什么?也许像
    类MyClass{public int Data{get;set;}}
    这样的小类没有析构函数,也没有解释这样的类会发生什么/不会发生什么?