我有一个简单的类 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/