Geschachtelte Typen (C#-Programmierhandbuch)

Ein innerhalb einer Klasse oder Struktur definierter Typ wird als geschachtelter Typ bezeichnet. Zum Beispiel:

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. Im vorherigen Beispiel konnten externe Typen nicht auf die Nested-Klasse zugreifen.

Sie können auch einen Zugriffsmodifizierer angeben, um den Zugriff auf einen geschachtelten Typ wie folgt zu definieren:

  • Geschachtelte Typen einer Klasse können öffentlich (public), geschützt (protected), intern (internal), intern geschützt (protected internal) oder privat (private) sein.

    Durch das Definieren einer geschachtelten protected- oder protected internal-Klasse innerhalb einer versiegelten Klasse wird jedoch die Compilerwarnung generiert CS0628, „Neues geschütztes Element deklariert in versiegelter Klasse“, generiert.

  • Geschachtelte Typen einer Struktur können öffentlich (public), intern (internal) oder privat (private) sein.

Im folgenden Beispiel wird die Nested-Klasse öffentlich gemacht:

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

Der geschachtelte oder innere Typ kann auf den enthaltenden oder äußeren Typ zugreifen. Um auf den enthaltenden Typ zuzugreifen, übergeben Sie ihn als Argument dem Konstruktor des geschachtelten Typs. Zum Beispiel:

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. 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.

In der vorherigen Deklaration ist Nested der vollständige Name der Klasse Container.Nested. Mit diesem Namen wird wie folgt eine neue Instanz der geschachtelten Klasse erstellt:

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

Siehe auch

C#-Programmierhandbuch
Klassen und Strukturen
Zugriffsmodifizierer
Konstruktoren