Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Тип, определенный в классе, структуре или интерфейсе , называется вложенным типом. Например.
public class Container
{
class Nested
{
Nested() { }
}
}
Независимо от того, является ли внешний тип классом, интерфейсом или структурой, вложенные типы по умолчанию закрыты; они доступны только из их содержащего типа. В предыдущем примере класс Nested
недоступно для внешних типов.
Можно также указать модификатор доступа , чтобы определить специальные возможности вложенного типа, как показано ниже.
Вложенные типы класса могут быть общедоступными, защищенными, внутренними, защищенными внутренними, частными или частными.
Однако определение вложенного
protected
,protected internal
илиprivate protected
класса внутри запечатанного класса, создает предупреждение компилятора CS0628, "новый защищенный член, объявленный в запечатанном классе".Также имейте в виду, что делать вложенные типы видимыми нарушает правило качества кода CA1034, "Вложенные типы не должны быть видимы".
Вложенные типы структуры могут быть общедоступными, внутренними или частными.
Следующий пример делает класс Nested
общедоступным:
public class Container
{
public class Nested
{
Nested() { }
}
}
Вложенный или внутренний тип может получить доступ к содержащему или внешнему типу. Чтобы получить доступ к содержащему типу, передайте его как аргумент конструктору вложенного типа. Рассмотрим пример.
public class Container
{
public class Nested
{
private Container? parent;
public Nested()
{
}
public Nested(Container parent)
{
this.parent = parent;
}
}
}
Вложенный тип имеет доступ ко всем элементам, доступным для его содержащего типа. Он может получить доступ к частным и защищенным членам содержащего типа, включая все унаследованные защищенные элементы.
В предыдущем объявлении полное имя класса Nested
Container.Nested
. Это имя, используемое для создания нового экземпляра вложенного класса, как показано ниже.
Container.Nested nest = new Container.Nested();