gpt4 book ai didi

c# - .NET 中的析构函数

转载 作者:行者123 更新时间:2023-11-30 19:37:12 25 4
gpt4 key购买 nike

NET 很久了,开始学习 C#。我想我几年前可能问过的一件事,得到了答案,但现在已经完全忘记了,因为它不是我暗中经常使用的东西是析构函数。在我学习 C# 的过程中,我阅读了一篇关于如何在 C# 中创建这些内容的文章,但它让我感到疑惑。假设我实例化了一个类,该类具有另一个类的对象。

Class C1
{
// Do something here
}

Class A
{
C1 objObjectToClass1 = new C1();
}

Class Main
{
A objObjectToClassA = new A();
}

并且我将对象 objObjectToClassA 设为 null,因为我一直相信这等同于 VB 中的 object = nothing。网。

objObectToClassA = null;

此操作是否也会破坏 objObjectToClass1

最佳答案

不是这样,不是。对象在符合收集条件后的某个时间会被垃圾收集器回收。这可能是在您清除对它的最后一次引用之后,但如果您在某一点之后不再需要该引用,则它可能已经存在。但一般来说,将存储实例的字段设置为 null 将有助于对象变得不再可访问并被回收。

通常,您无法控制对象何时被 GC 回收。您可以编写终结器,它们是在回收对象之前调用的方法,但如果可以的话,我非常推荐它。如果您需要一种可预测的方式来使对象释放它可能持有的任何资源(C++ 中的析构函数经常这样做),那么实现 IDisposable interface :

class C1 : IDisposable {
public void Dispose() {
// Do cleanup here
}
}

这也使您能够在 using statement 中使用该类的实例,它将在其 block 的末尾调用 Dispose:

using (var c1 = new C1()) {
// do stuf with c1 here
} // at this point c1.Dispose() is automatically called

关于c# - .NET 中的析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38915008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com