CA2015: MemoryManager から派生した型にはファイナライザーを定義しません<T>
プロパティ | 値 |
---|---|
ルール ID | CA2015 |
Title | MemoryManager<T> から派生した型にはファイナライザーを定義しません |
[カテゴリ] | 信頼性 |
修正が中断ありか中断なしか | なし |
.NET 8 では既定で有効 | 警告として |
原因
MemoryManager<T> から派生した型のファイナライザーの定義
規則の説明
MemoryManager<T> から派生した型にファイナライザーを追加すると、バグの発生を示すメッセージが表示されることがあります。これは、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
詳細については、「コード分析の警告を抑制する方法」を参照してください。
関連規則
関連項目
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET