次の方法で共有


CA1852: 内部型をシールする

プロパティ
ルール ID CA1852
Title 内部型をシールする
[カテゴリ] パフォーマンス
修正が中断ありか中断なしか なし
導入されたバージョン .NET 7
.NET 8 では既定で有効 いいえ

原因

アセンブリの外部でアクセスできない型で、それに含まれるアセンブリ内にサブタイプがない場合は、sealed (Visual Basic では NotInheritable) とマークされません。

規則の説明

型がアセンブリの外部でアクセスできず、それに含まれるアセンブリ内にサブタイプがない場合は、安全にシールできます。 型をシールすることで、パフォーマンスを向上させることができます。 詳細については、「 Analyzer 提案: 内部/プライベート型のシール]」を参照してください。

System.Runtime.CompilerServices.InternalsVisibleToAttribute を分析対象のアセンブリに適用する場合、フィールドはフレンド アセンブリによって使用される可能性があるため、この規則は既定では、sealed としてマークされている型にフラグを設定しません。 いずれにしてもアセンブリを分析するには、「分析するコードを構成する」を参照してください。

違反の修正方法

型を sealed (Visual Basic では NotInheritable) としてマークします。

次のコード スニペットは CA1852 の違反を示しています。

internal class C
{ }
Class C
End Class

次のコード スニペットでは違反を修正しています。

internal sealed class C
{ }
NotInheritable Class C
End Class

どのようなときに警告を抑制するか

パフォーマンスが問題でない場合は、警告を抑制しても問題ありません。

警告を抑制する

単一の違反を抑制するだけの場合は、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、規則をもう一度有効にします。

#pragma warning disable CA1852
// The code that's violating the rule is on this line.
#pragma warning restore CA1852

ファイル、フォルダー、またはプロジェクトの規則を無効にするには、構成ファイルでその重要度を none に設定します。

[*.{cs,vb}]
dotnet_diagnostic.CA1852.severity = none

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

分析するコードを構成する

次のオプションを使用して、コードベースのどの部分に対してこの規則を実行するか構成します。

このオプションを構成できる対象は、この規則だけ、それを適用するすべての規則、それを適用するこのカテゴリ (パフォーマンス) のすべての規則のいずれかです。 詳細については、「コード品質規則の構成オプション」を参照してください。

InternalsVisibleTo 属性を無視する

既定では、分析対象のアセンブリがその内部シンボルを公開するために InternalsVisibleToAttribute を使用している場合、この規則は無効になります。 アセンブリが InternalsVisibleToAttribute によってマークされていても規則を実行するように指定するには、自分のプロジェクトの .editorconfig ファイルに次のキーと値のペアを追加します。

dotnet_code_quality.CAXXXX.ignore_internalsvisibleto = true

このオプションは、.NET 8 以降で使用できます。