Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Вложенный тип — это тип, который определяется в классе, структуре или интерфейсе. Рассмотрим пример.
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;
}
}
}
Вложенный тип имеет доступ ко всем элементам, доступным для его содержащего типа. Он может получить доступ к частным и защищенным членам содержащего типа, включая все унаследованные защищенные элементы.
В предыдущем объявлении полное имя класса NestedContainer.Nested. Это имя, используемое для создания нового экземпляра вложенного класса, как показано ниже.
Container.Nested nest = new Container.Nested();