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

TypeName

NestedTypesShouldNotBeVisible

CheckId

CA1034

分類

Microsoft.Design

互換性に影響する変更点

あり

原因

外部から参照できる型に、外部から参照できる型宣言があります。入れ子にされた列挙およびプロテクト型には、この規則は適用されません。

規則の説明

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

論理的なグループ化や、名前の衝突を回避する目的では、外部から参照できる入れ子にされた型を使用しないでください。代わりに、名前空間を使用します。

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

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

違反の修正方法

入れ子にされた型が外部から参照できなくてもよい場合は、型のアクセシビリティを変更します。または、入れ子にされた型を親の型から削除します。型を分類するために入れ子にした場合、入れ子にするのではなく、名前空間を使用して階層構造を作成します。

警告を抑制する状況

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

使用例

この規則に違反する型を次の例に示します。

Imports System

Namespace DesignLibrary

    Class ParentType

        Public Class NestedType
            Sub New()
            End Sub 
        End Class 

        Sub New()
        End Sub 

    End Class 

End Namespace
using System;

namespace DesignLibrary
{
    internal class ParentType
    {
        public class NestedType
        {
            public NestedType()
            {
            }
        }

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

namespace DesignLibrary
{
    public ref class ParentType
    {
    public:
        ref class NestedType
        {
        public:
            NestedType()
            {
            }
        };

        ParentType()
        {
            NestedType^ nt = gcnew NestedType();
        }
    };
}