Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Typ zagnieżdżony jest typem zdefiniowanym w klasie, struktury lub interfejsie. Przykład:
public class Container
{
class Nested
{
Nested() { }
}
}
Niezależnie od tego, czy typ zewnętrzny jest klasą, interfejsem lub strukturą, zagnieżdżone typy są domyślnie prywatne. Dostęp do nich można uzyskać tylko poprzez ich typ zawierający. W poprzednim przykładzie typy zewnętrzne nie mogą uzyskać dostępu do Nested klasy.
Można również określić modyfikator dostępu , aby zdefiniować dostępność typu zagnieżdżonego w następujący sposób:
Zagnieżdżone typy klasy mogą być publiczne, chronione, wewnętrzne, chronione wewnętrznie, prywatne lub prywatne chronione.
Jednak zdefiniowanie
protectedklasy ,protected internallubprivate protectedzagnieżdżonej wewnątrz zapieczętowanej klasy generuje ostrzeżenie kompilatora CS0628 "nowy chroniony element członkowski zadeklarowany w klasie zapieczętowanej".Należy również pamiętać, że zewnętrzne uwidocznienie zagnieżdżonego typu narusza regułę jakości kodu CA1034 "Zagnieżdżone typy nie powinny być widoczne".
Zagnieżdżone typy struktury mogą być publiczne, wewnętrzne lub prywatne.
W poniższym przykładzie klasa Nested jest publiczna:
public class Container
{
public class Nested
{
Nested() { }
}
}
Typ zagnieżdżony lub wewnętrzny może uzyskać dostęp do typu zawierającego lub zewnętrznego. Aby uzyskać dostęp do typu, który zawiera, przekaż go jako argument do konstruktora typu zagnieżdżonego. Przykład:
public class Container
{
public class Nested
{
private Container? parent;
public Nested()
{
}
public Nested(Container parent)
{
this.parent = parent;
}
}
}
Typ zagnieżdżony ma dostęp do wszystkich członków, które są dostępne dla typu, w którym jest zawarty. Może ona uzyskiwać dostęp do prywatnych i chronionych elementów członkowskich typu zawierającego, w tym do wszystkich dziedziczynych chronionych elementów członkowskich.
W poprzedniej deklaracji pełna nazwa Nested klasy to Container.Nested. Jest to nazwa użyta do utworzenia nowego wystąpienia zagnieżdżonej klasy w następujący sposób:
Container.Nested nest = new Container.Nested();
Zobacz także
- System typów języka C#
- Modyfikatory dostępu
- Konstruktory
- Reguła CA1034