CA1812:インスタンス化されていない内部クラスを使用しません
プロパティ | 値 |
---|---|
ルール ID | CA1812 |
Title | インスタンス化されていない内部クラスを使用しません |
[カテゴリ] | パフォーマンス |
修正が中断ありか中断なしか | なし |
.NET 8 では既定で有効 | いいえ |
原因
内部 (アセンブリ レベル) 型はインスタンス化されません。
規則の説明
この規則は、型のいずれかのコンストラクターへの呼び出しを検索し、呼び出しが見つからない場合に違反を報告します。
この規則では、次の型は検証されません。
- 値型
- 抽象型
- 列挙
- 代理人
- コンパイラによって出力された配列型
- インスタンス化できず、
static
メソッドのみを定義する型。
System.Runtime.CompilerServices.InternalsVisibleToAttribute を分析対象のアセンブリに適用する場合、フィールドはフレンド アセンブリによって使用される可能性があるため、この規則は既定では、internal
(Visual Basic では Friend
) としてマークされている型にフラグを設定しません。 いずれにしてもアセンブリを分析するには、「分析するコードを構成する」を参照してください。
違反の修正方法
この規則の違反を修正するには、型を削除するか、その型を使用するコードを追加します。 型に static
メソッドのみが含まれている場合は、static
修飾子を型に追加して、コンパイラが既定のパブリック インスタンス コンストラクターを生成しないようにします。
どのようなときに警告を抑制するか
この規則による警告を抑制しても問題ありません。 次の状況では、この警告を抑制することをお勧めします。
System.Activator.CreateInstance などの遅延バインディングされたリフレクション メソッドを使用してクラスが作成されます。
クラスは、依存関係の挿入パターンの一部として制御の反転 (IoC) コンテナーに登録されます。
ランタイムまたは ASP.NET によって自動的にクラスが作成されます。 自動的に作成されるクラスの例として、System.Configuration.IConfigurationSectionHandler または System.Web.IHttpHandler を実装するクラスがあります。
クラスはクラス定義の型パラメーターとして使われ、
new
制約があります。 次の例は、規則 CA1812 によってフラグが設定されます。internal class MyClass { public void DoSomething() { } } public class MyGeneric<T> where T : new() { public T Create() { return new T(); } } MyGeneric<MyClass> mc = new MyGeneric<MyClass>(); mc.Create();
警告を抑制する
単一の違反を抑制するだけの場合は、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、規則をもう一度有効にします。
#pragma warning disable CA1812
// The code that's violating the rule is on this line.
#pragma warning restore CA1812
ファイル、フォルダー、またはプロジェクトの規則を無効にするには、構成ファイルでその重要度を none
に設定します。
[*.{cs,vb}]
dotnet_diagnostic.CA1812.severity = none
詳細については、「コード分析の警告を抑制する方法」を参照してください。
分析するコードを構成する
次のオプションを使用して、コードベースのどの部分に対してこの規則を実行するか構成します。
このオプションを構成できる対象は、この規則だけ、それを適用するすべての規則、それを適用するこのカテゴリ (パフォーマンス) のすべての規則のいずれかです。 詳細については、「コード品質規則の構成オプション」を参照してください。
InternalsVisibleTo 属性を無視する
既定では、分析対象のアセンブリがその内部シンボルを公開するために InternalsVisibleToAttribute を使用している場合、この規則は無効になります。 アセンブリが InternalsVisibleToAttribute によってマークされていても規則を実行するように指定するには、自分のプロジェクトの .editorconfig ファイルに次のキーと値のペアを追加します。
dotnet_code_quality.CAXXXX.ignore_internalsvisibleto = true
このオプションは、.NET 8 以降で使用できます。
関連規則
.NET