C#中finalizer和finally的区别
C#中finalizer和finally的区别
我正在学习c#中垃圾回收器的工作原理。我对Destructor
、Dispose
和Finalize
方法的使用感到困惑。
根据我的研究和理解,将析构函数方法置于类中将告诉垃圾回收器按照析构函数方法中提到的方式进行垃圾收集,这不能在类的实例中显式调用。
Dispose
方法旨在提供用户对垃圾收集的控制。 Finalize
方法释放类使用的资源,但不会释放对象本身。
我不确定是否理解得正确,请澄清疑问。欢迎提供更多链接或指南。
admin 更改状态以发布 2023年5月21日
析构函数在技术上与Finalize方法是相同的,它们是隐式调用的。而Dispose仅适用于实现了IDisposable接口的对象。
你可以在此处查看:Destructors C# - MSDN
析构函数会隐式调用对象基类的Finalize方法。
以下来源于相同的链接的示例代码:
class Car { ~Car() // destructor { // cleanup statements... } }
析构函数的代码隐式转换为以下代码:
protected override void Finalize() { try { // Cleanup statements... } finally { base.Finalize(); } }
你对析构函数的理解是正确的:
以上内容来自MSDN
程序员无法控制析构函数被调用的时间,因为这由垃圾回收器决定。垃圾回收器检查不再被应用程序使用的对象。如果它认为某个对象可用于销毁,它就调用(如果有的话)析构函数并回收用于存储该对象的内存。在程序退出时也会调用析构函数。可以通过调用Collect来强制进行垃圾回收,但大多数情况下应该避免这样做,因为它可能会导致性能问题。