次の方法で共有


CA2015: MemoryManager から派生した型にはファイナライザーを定義しません<T>

プロパティ
ルール ID CA2015
Title MemoryManager<T> から派生した型にはファイナライザーを定義しません
[カテゴリ] 信頼性
修正が破壊的か非破壊的か なし
.NET 10 で既定で有効 警告として
該当する言語 C# と Visual Basic

原因

MemoryManager<T> から派生した型のファイナライザーの定義

規則の説明

から派生した型にファイナライザーを追加することは、バグの可能性を示している場合があります。これは、 によって渡されたネイティブリソースが< c2 />でまだ使用されている間にクリーンアップされている可能性を示唆しています。

注意

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

詳細については、「コード分析の警告を抑制する方法」を参照してください。

関連項目