入れ子にされた型 (C# プログラミング ガイド)Nested Types (C# Programming Guide)

クラス構造体の中で定義された型は、入れ子にされた型と呼ばれます。A type defined within a class or struct is called a nested type. 次に例を示します。For example:

class Container
{
    class Nested
    {
        Nested() { }
    }
}

外側の型がクラスまたは構造体のいずれであっても、入れ子にされた型は既定で private になります。これらにはその包含する型からのみアクセスできます。Regardless of whether the outer type is a class or a struct, nested types default to private; they are accessible only from their containing type. 前の例では、Nested クラスは外部の型にアクセスできません。In the previous example, the Nested class is inaccessible to external types.

次のように、アクセス修飾子を指定して、入れ子にされた型のアクセシビリティを定義することもできます。You can also specify an access modifier to define the accessibility of a nested type, as follows:

次の例では、Nested クラスを public にします。The following example makes the Nested class public:

class Container
{
    public class Nested
    {
        Nested() { }
    }
}

入れ子にされた型 (内側の型) は、包含する型 (外側の型) にアクセスできます。The nested, or inner, type can access the containing, or outer, type. 包含する型にアクセスするには、その型を引数として入れ子にされた型のコンストラクターに渡します。To access the containing type, pass it as an argument to the constructor of the nested type. 次に例を示します。For example:

public class Container
{
    public class Nested
    {
        private Container parent;

        public Nested()
        {
        }
        public Nested(Container parent)
        {
            this.parent = parent;
        }
    }
}

入れ子にされた型は、包含する型にアクセス可能なすべてのメンバーにアクセスできます。A nested type has access to all of the members that are accessible to its containing type. 入れ子にされた型は、継承されたプロテクト メンバーを含む、包含する型のプライベート メンバーとプロテクト メンバーにアクセスできます。It can access private and protected members of the containing type, including any inherited protected members.

上記の宣言では、クラス Nested の完全名は Container.Nested です。In the previous declaration, the full name of class Nested is Container.Nested. これは、次のように入れ子になったクラスの新しいインスタンスを作成するときに使用される名前です。This is the name used to create a new instance of the nested class, as follows:

Container.Nested nest = new Container.Nested();

関連項目See also