CA1812: インスタンス化されていない内部クラスを使用しないでください
TypeName |
AvoidUninstantiatedInternalClasses |
CheckId |
CA1812 |
分類 |
Microsoft.Performance |
互換性に影響する変更点 |
なし |
原因
アセンブリ レベルの型のインスタンスが、アセンブリ内のコードから作成されません。
規則の説明
この規則では、型のコンストラクターのいずれかに対する呼び出しの位置を検索し、呼び出しが見つからない場合は違反をレポートします。
次の型は、この規則でチェックされません。
値型
抽象型
列挙型
デリゲート
コンパイラから出力された配列型
static (Visual Basic では Shared) メソッドのみを定義するインスタンス化できない型
分析対象のアセンブリに System.Runtime.CompilerServices.InternalsVisibleToAttribute を適用する場合は、別の friend アセンブリでフィールドが使用されているかを判断できないため、この規則は internal としてマークされたコンストラクターには適用されません。
Visual Studio コード分析ではこの制限を回避できませんが、すべての friend アセンブリが分析に含まれる場合は、外部のスタンドアロン FxCop が内部コンストラクターに対して実行されます。
違反の修正方法
この規則違反を修正するには、その型を削除するか、その型を使用するコードを追加します。 型に静的メソッドのみが含まれる場合、次のいずれかを型に追加して、コンパイラから既定のパブリック インスタンス コンストラクターが出力されないようにします。
プライベート コンストラクター (.NET Framework Version 1.0 および 1.1 を対象にした型の場合)
static (Visual Basic では Shared) 修飾子 (.NET Framework 2.0 を対象にした型の場合)
警告を抑制する状況
この規則による警告を抑制しても安全です。 次の場合は、この警告を抑制することを勧めします。
クラスが、CreateInstance などの遅延バインディング リフレクション メソッドで作成されている。
クラスが、ランタイムまたは ASP.NET で自動的に作成されている。たとえば、System.Configuration.IConfigurationSectionHandler や System.Web.IHttpHandler を実装するクラスです。
クラスが、新しい制約を持つジェネリック型パラメーターとして渡される。 たとえば、次の例ではこの規則が適用されます。
internal class MyClass { public DoSomething() { } } public class MyGeneric<T> where T : new() { public T Create() { return new T(); } } // [...] MyGeneric<MyClass> mc = new MyGeneric<MyClass>(); mc.Create();
このような場合は、この警告を抑制することを勧めします。