CA1852: 内部型をシールする
プロパティ | 値 |
---|---|
ルール ID | CA1852 |
Title | 内部型をシールする |
[カテゴリ] | パフォーマンス |
修正が中断ありか中断なしか | なし |
導入されたバージョン | .NET 7 |
.NET 9 では既定で有効 | いいえ |
原因
アセンブリの外部でアクセスできない型で、それに含まれるアセンブリ内にサブタイプがない場合は、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 以降で使用できます。
.NET