Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Typ zdefiniowany w klasie, struktury lub interfejsie jest nazywany typem zagnieżdżonym. Na przykład
public class Container
{
class Nested
{
Nested() { }
}
}
Niezależnie od tego, czy typ zewnętrzny jest klasą, interfejsem, czy strukturą, zagnieżdżone typy są domyślnie prywatne; są one dostępne tylko z wnętrza swojego typu zawierającego. W poprzednim przykładzie klasa Nested
jest niedostępna dla typów zewnętrznych.
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ętrzne, prywatne lub prywatne chronione.
Jednak zdefiniowanie zagnieżdżonej klasy
protected
,protected internal
lubprivate protected
wewnątrz klasy sealed generuje ostrzeżenie kompilatora CS0628 "nowy chroniony element członkowski zadeklarowany w klasie sealed".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