CA2015:请勿为派生自 MemoryManager<> 的类型定义终结器
属性 | 值 |
---|---|
规则 ID | CA2015 |
标题 | 请勿为派生自 MemoryManager<T> 的类型定义终结器 |
类别 | 可靠性 |
修复是中断修复还是非中断修复 | 非中断 |
在 .NET 8 中默认启用 | 作为警告 |
原因
为派生自 MemoryManager<T> 的类型定义终结器
规则说明
如果发生将终结器添加到派生自 MemoryManager<T> 的类型的情况,可能表示存在 bug,因为这表明在 Span<T> 中分发的本机资源正在被清除,同时 Span<T> 可能仍在使用该资源。
注意
MemoryManager<T> 类适用于高级方案。 大多数开发人员不需要使用它。
如何解决冲突
若要解决此冲突,请删除终结器定义。
class DerivedClass <T> : MemoryManager<T>
{
public override bool Dispose(bool disposing)
{
if (disposing)
{
_handle.Dispose();
}
}
...
// Violation occurs, remove the finalizer to fix the warning.
~DerivedClass() => Dispose(false);
}
何时禁止显示警告
如果目的是创建用于调试或验证的终结器,则可以禁止显示与此规则的冲突。
抑制警告
如果只想抑制单个冲突,请将预处理器指令添加到源文件以禁用该规则,然后重新启用该规则。
#pragma warning disable CA2015
// The code that's violating the rule is on this line.
#pragma warning restore CA2015
若要对文件、文件夹或项目禁用该规则,请在配置文件中将其严重性设置为 none
。
[*.{cs,vb}]
dotnet_diagnostic.CA2015.severity = none
若要禁用此整个规则类别,请在配置文件中将此类别的严重性设置为 none
。
[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Reliability.severity = none
有关详细信息,请参阅如何禁止显示代码分析警告。