gpt4 book ai didi

c# - 在 C# 中如何覆盖 Finalize() 方法?

转载 作者:太空狗 更新时间:2023-10-29 20:45:10 27 4
gpt4 key购买 nike

以下函数给出编译错误“不要覆盖 object.Finalize。相反,提供一个析构函数。”

protected override void Finalize()
{
this.Dispose();
base.Finalize();
}

最佳答案

终结器方法称为 ~name(),用您的类名替换“name”。

C# 编译器将从中生成终结器。

但注意:

  1. 仅在确实需要时使用终结器:您的类型直接包含 native 资源(构成包装器的类型仅使用 Dispose 模式)。
  2. 考虑专门化 SafeHandle 而不是自己编写。
  3. 实现处置模式以允许调用者快速释放资源。
  4. 确保您的 Dispose 和 Finalizer 都是幂等的——它们可以安全地多次调用。

例如

class MyClass : IDisposable {
private IntPtr SomeNativeResource;

~MyClass() {
Dispose(false);
}

public void Dispose() {
Dispose(true);
}

protected virtual void Dispose(bool disposing) {
if (disposing) {
// Dispose any disposable fields here
GC.SuppressFinalize(this);
}
ReleaseNativeResource();
}
}

子类可以覆盖 Dispose(bool) 以添加他们添加的任何附加字段并调用基本实现。

已编辑:添加有关何时完成的示例和注释。

关于c# - 在 C# 中如何覆盖 Finalize() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2913135/

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