我的类实现IDisposable
并遵循模式在哪里
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
Run Code Online (Sandbox Code Playgroud)
但是声纳还在告诉我,我需要实施配置模式......
https://sonarqube.com/issues#issues=AVtsPLjmtpYg8Dj4z0MU
这是声纳的缺陷还是我错过了什么?
Val*_*Val 23
我看到你已经解决了这个问题,但是如果其他人遇到同样的问题,我会详细说明规则要求.
此规则的想法是允许潜在的派生类正确地处理类的成员.因此,如果您的类是密封的,该规则假定您的类正确处置自己并且什么都不做(还有另一个规则,S2931检查您的类是否包含IDisposable
需要处理的字段).
如果类未密封,则规则检查它是否具有实现的基类IDisposable
.如果它已经并且您的类也实现了IDisposable
,那么规则将建议删除您的实现(例如IDisposable
从类中删除接口)并覆盖基类的protected Dispose(bool)
方法.
如果基类未实现IDisposable
,则规则需要一个protected virtual Dispose(bool)
方法(允许继承者正确地处理您的类).
如果您的类包含终结器,即析构函数,则规则检查其内容是否为单个调用Dispose(false)
.
规则检查Dispose()
方法的内容(来自接口的内容)是否包含单个调用Dispose(true)
.如果您的班级有终结器,则该规则需要额外调用GC.SuppressFinalize(this)
.
基本上这些是IDisposable
根据规则的正确实现:
密封类
public sealed class Foo1 : IDisposable
{
public void Dispose()
{
// Cleanup
}
}
Run Code Online (Sandbox Code Playgroud)
简单的实施
public class Foo2 : IDisposable
{
public void Dispose()
{
Dispose(true);
}
protected virtual void Dispose(bool disposing)
{
// Cleanup
}
}
Run Code Online (Sandbox Code Playgroud)
使用终结器实现
public class Foo3 : IDisposable
{
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
// Cleanup
}
~Foo3()
{
Dispose(false);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5958 次 |
最近记录: |