gpt4 book ai didi

c# - C#析构函数在哪里

转载 作者:行者123 更新时间:2023-11-30 13:47:58 26 4
gpt4 key购买 nike

我有一个生成另一个 UI 线程的类,它就是这样。每当我的父类被销毁时,我需要中止该线程并进行清理。那么我怎么知道我的父类何时被销毁呢?

来自 C++,我的第一个想法是将它放在析构函数中。但是 C# 并没有真正的任何析构函数——只有终结器和处置——据我所知——可能会也可能不会被调用(我想这对 GC 来说是一种心情??)。

这很好也很简单 - 如果您可能想要也可能不想释放您的资源。

但是,当对象被销毁时,绝对必须执行的代码放在哪里呢?

最佳答案

您将它放在 Dispose 中(实现 IDisposable 接口(interface)),然后确保在不再需要该对象时调用 Dispose。有一种语言结构可以做到这一点:

using (var foo = new Foo())
{
// Do something with foo.
}

foo.Dispose 将在 using block 的末尾调用。这相当于:

{
var foo = new Foo();
try
{
// Do something with foo.
}
finally
{
foo.Dispose();
}
}

请注意,当对象离开作用域时,Dispose 不会自动调用;您需要自己完成,使用 using block 或显式调用它。

但是,您应该在调用 DisposeFoo 中提供一个终结器,这样如果对象在 GC 到达之前没有被释放,您就不会t 留下未发布的资源:

~Foo()
{
Dispose();
}

IDisposable 模式背后的想法是,它会明确地告诉您类何时需要处置。 Here's an article描述如何正确实现它(考虑可能的后代类)。

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

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