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

有关详细信息,请参阅如何禁止显示代码分析警告

另请参阅