Geschachtelte Typen (C#-Programmierhandbuch)Nested Types (C# Programming Guide)

Ein innerhalb einer Klasse oder Struktur definierter Typ wird als geschachtelter Typ bezeichnet.A type defined within a class or struct is called a nested type. Zum Beispiel:For example:

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

Unabhängig davon, ob der äußere Typ eine Klasse oder eine Struktur ist, lautet die Standardeinstellung von geschachtelten Typen private. Sie sind nur über ihren enthaltenden Typ zugänglich.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. Im vorherigen Beispiel konnten externe Typen nicht auf die Nested-Klasse zugreifen.In the previous example, the Nested class is inaccessible to external types.

Sie können auch einen Zugriffsmodifizierer angeben, um den Zugriff auf einen geschachtelten Typ wie folgt zu definieren:You can also specify an access modifier to define the accessibility of a nested type, as follows:

Im folgenden Beispiel wird die Nested-Klasse öffentlich gemacht:The following example makes the Nested class public:

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

Der geschachtelte oder innere Typ kann auf den enthaltenden oder äußeren Typ zugreifen.The nested, or inner, type can access the containing, or outer, type. Um auf den enthaltenden Typ zuzugreifen, übergeben Sie ihn als Argument dem Konstruktor des geschachtelten Typs.To access the containing type, pass it as an argument to the constructor of the nested type. Zum Beispiel:For example:

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

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

Ein geschachtelter Typ hat Zugriff auf alle Member, die für ihren äußeren (enthaltenden) Typ zugreifbar sind.A nested type has access to all of the members that are accessible to its containing type. Er kann auf die Member des äußeren (enthaltenden) Typs zugreifen, die "private" oder "protected" sind, ebenso auf alle geerbten Member, die "private" oder "protected" sind.It can access private and protected members of the containing type, including any inherited protected members.

In der vorherigen Deklaration ist Nested der vollständige Name der Klasse Container.Nested.In the previous declaration, the full name of class Nested is Container.Nested. Mit diesem Namen wird wie folgt eine neue Instanz der geschachtelten Klasse erstellt:This is the name used to create a new instance of the nested class, as follows:

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

Siehe auchSee Also

C#-ProgrammierhandbuchC# Programming Guide
Klassen und StrukturenClasses and Structs
ZugriffsmodifiziererAccess Modifiers
KonstruktorenConstructors