CA1034: 入れ子にされた型を参照可能にすることはできません

プロパティ
ルール ID CA1034
Title 入れ子にされた型を参照可能にすることはできません
[カテゴリ] デザイン
修正が中断ありか中断なしか あり
.NET 8 では既定で有効 いいえ

原因

外部で参照できる型に、外部で参照できる型宣言が含まれています。 入れ子にされた列挙型、protected 型、ビルダー パターンにはこの規則は適用されません。

規則の説明

入れ子にされた型とは、別の型のスコープ内で宣言された型のことです。 入れ子にされた型は、それを入れ子にする型のプライベート実装の詳細をカプセル化するときに便利です。 このような用途なので、入れ子にされた型は外部から参照できないようにします。

入れ子にされた型が外部から参照できるなら、論理的なグループ化に使用しないでください。あるいは名前の競合を避ける目的で使用しないでください。代わりに、名前空間を使用してください。

入れ子にされた型には、メンバー アクセシビリティという概念が含まれます。これはプログラマーに明確に理解されていない場合があります。

protected 型は、高度なカスタマイズ シナリオで、サブクラスや入れ子にされた型で使用できます。

違反の修正方法

入れ子にされた型を外部から参照させない場合、型のアクセシビリティを変更します。 それ以外の方法としては、入れ子にされた型をその親から削除します。 入れ子を使用する目的が入れ子にされた型の分類にある場合、代わりに名前空間を使用して階層を作成してください。

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

この規則による警告は抑制しないでください。

次の例は、規則に違反する型を示しています。

public class ParentType
{
    public class NestedType
    {
        public NestedType()
        {
        }
    }

    public ParentType()
    {
        NestedType nt = new NestedType();
    }
}
Imports System

Namespace ca1034

    Class ParentType

        Public Class NestedType
            Sub New()
            End Sub
        End Class

        Sub New()
        End Sub

    End Class

End Namespace