Поделиться через


Вложенные типы

Вложенный тип — это тип, являющийся членом какого-либо другого типа. Вложенные типы должны быть тесно связаны с объявляющим их типом и не должны использоваться в качестве типов общего назначения. Применение вложенных типов некоторым разработчикам не всегда понятно; эти типы не должны быть публично видимыми до тех пор, пока не появится существенная причина для этого. В хорошо спроектированной библиотеке разработчикам редко приходится использовать вложенные типы для создания экземпляров объектов или объявления переменных.

Вложенные типы полезны, когда объявляющий тип использует и создает экземпляры вложенного типа и использование вложенного типа не открывается в публичных членах.

Используйте вложенные типы, когда отношения между вложенным типом и его внешним типом таковы, что желательна семантика доступности членов.

Так как вложенный тип считается членом объявляющего типа, вложенный тип имеет доступ ко всем другим членам объявляющего типа.

Не используйте публичные вложенные типы в качестве конструкции логической группировки; для этого рекомендуется использовать пространство имен.

Избегайте использования открытых вложенных типов. Единственным исключением из этого правила является ситуация, когда переменные вложенного типа должны быть объявлены в особых сценариях, таких как работа с подклассами и другими расширенными сценариями.

Не используйте вложенные типы, если к типу предполагается ссылка извне объявляющего типа.

Объявление переменных и создание экземпляров объекта для вложенных типов не должно потребоваться для обычных сценариев. Например, делегат обработчика событий, который обрабатывает событие, описанное для определенного класса, не должен быть вложенным в класс.

Не используйте вложенные типы, если их экземпляры должны создаваться кодом клиента. Если тип имеет открытый конструктор, вероятно, он не должен быть вложенным.

В идеале экземпляр вложенного типа создается и используется только его объявляющим типом. Если вложенный тип имеет открытый конструктор, это означает, что этот тип используется отдельно от его объявляющего типа. В общем случае вложенный тип не должен использоваться в типах, отличных от его объявляющего типа. Если тип имеет более широкое предназначение, вероятно, он не должен быть вложенным.

Не определяйте вложенный тип в качестве члена интерфейса. В большинстве языков такая конструкция не поддерживается.

Охраняется авторским правом Copyright 2005 Microsoft Corporation. Все права защищены.

Фрагменты — © Addison-Wesley Corporation. Все права защищены.

Для дополнительной информации о разработке руководящих принципов, смотрите "руководства по разработке рамок: Конвенций, идиомы и шаблоны для повторного использования.NET библиотек"книга, Кшиштоф Cwalina и Брэд Абрамс, опубликованных Addison-Wesley, 2005 года.

См. также

Основные понятия

Типы и пространства имен

Другие ресурсы

Правила разработки типов

Руководство по разработке библиотек классов