Geschachtelte Typen (C#-Programmierhandbuch)

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

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

Unabhängig davon, ob die äußeren Typen Klassen oder Strukturen sind, sind geschachtelte Typen standardmäßig auf private festgelegt, können jedoch auch auf public, protected internal, protected, internal oder private festgelegt werden. Im vorherigen Beispiel ist Nested für externe Typen nicht zugreifbar, kann aber wie folgt öffentlich gemacht werden:

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

Der geschachtelte oder innere Typ kann auf den enthaltenden oder äußeren Typ zugreifen. Um auf den äußeren (enthaltenden) Typ zuzugreifen, übergeben Sie ihn dem geschachtelten Typ als Konstruktor. 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 Container.Nested der vollständige Name der Klasse 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