gpt4 book ai didi

c# - 使困惑。 CA1063错了吗? GC.SuppressFinalize(这个)

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

我有一个简单的类 MyDataClass,其成员 (obj) 实现了 IDisposable:

public class MyDataClass : IDisposable
{
private DisposableObject obj;
private List<string> list;
private int c;

public MyDataClass()
{
obj = new DisposableObject();
list = new List<string>();
c = 114;
}

public void Dispose()
{
obj.Dispose();
}
}

public class DisposableObject : IDisposable
{
public void Dispose()
{
// Free resource
Console.WriteLine("Dispose DisposableObject");
}
}

当我运行代码分析时,我收到 CA1063 警告,它告诉我应该在 Dispose() 方法中调用 GC.SuppressFinalize() 方法>MyDataClass 实现。

而且我对这个 CA1063 警告真的很困惑。因为据我所知,我应该调用 GC.SuppressFinalize() 来向垃圾收集器指示:

“嘿 GC,不要担心这个对象,因为我已经为你完成了所有清理工作!”

所以请确认我是否错了。如果我将添加 GC.SuppressFinalize() 我将摆脱 CA1063 但它会导致 GC 不会清理我的对象。所以我会发生内存泄漏,因为其他类成员(托管代码)不会被清理。

最佳答案

GC.SuppressFinalize() 方法指示 VM 不要运行 finalizer。这是 C# 中看起来很有趣的方法:

~MyDataClass()

要删除警告,您需要密封您的类(class),或实现完整的 IDisposable pattern .

关于c# - 使困惑。 CA1063错了吗? GC.SuppressFinalize(这个),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11793119/

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