Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein geschachtelter Typ ist ein Typ, den Sie innerhalb einer Klasse, Struktur oder Schnittstelle definieren. Beispiel:
public class Container
{
class Nested
{
Nested() { }
}
}
Unabhängig davon, ob der äußere Typ eine Klasse, Schnittstelle oder Struktur ist, sind geschachtelte Typen standardmäßig privat. Sie können nur von ihrem enthaltenden Typ aus darauf zugreifen. Im vorherigen Beispiel können externe Typen nicht auf die Nested Klasse zugreifen.
Sie können auch einen Zugriffsmodifizierer angeben, um die Barrierefreiheit eines geschachtelten Typs wie folgt zu definieren:
Geschachtelte Typen einer Klasse können öffentlich, geschützt, intern, geschützt intern, privat oder privat geschützt sein.
Wenn Sie jedoch eine
protected,protected internaloderprivate protectedgeschachtelte Klasse innerhalb einer abgeschlossenen Klasse definieren, wird die Compilerwarnung CS0628 generiert: "Neues geschütztes Element, das in der abgeschlossenen Klasse deklariert ist".Beachten Sie außerdem, dass das Sichtbarmachen eines geschachtelten Typs nach außen gegen die Codequalitätsregel CA1034 "Geschachtelte Typen sollten nicht sichtbar sein" verstößt.
Geschachtelte Typen einer Struktur können öffentlich, intern oder privat sein.
Im folgenden Beispiel wird die Nested Klasse öffentlich:
public 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 an den Konstruktor des geschachtelten Typs. 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 Elemente, auf die der enthaltende Typ zugreifen kann. 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 der vollständige Name der Klasse NestedContainer.Nested. Dies ist der Name, der zum Erstellen einer neuen Instanz der geschachtelten Klasse wie folgt verwendet wird:
Container.Nested nest = new Container.Nested();