C #, можно ли использовать вложенные классы для логической структуры? - PullRequest
8 голосов
/ 13 сентября 2011

У меня небольшая дискуссия об использовании вложенных классов. Ситуация такова, что имя класса имеет смысл повторяться в двух или более местах, и хотя между каждым из этих экземпляров существует умеренное сходство, они обычно различаются. Вложенные классы не часто (если вообще нужны) выходят за рамки родительского класса.

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

class A {
   class B {
}

class M {
   class B {
   }
}

class Q {
   class B {
   }
}

Очевидная проблема - не функциональность, а последовательность / повторение. Мне было интересно, сталкивались ли когда-либо другие разработчики с такими же вещами, и каковы были некоторые мнения.

Ответы [ 11 ]

0 голосов
/ 13 сентября 2011

Я понимаю, что ваш образец не совсем надуманный. Тем не менее, если ваши имена классов достаточно похожи - или идентичны - вам действительно не следует делать их вложенными классами. Как правило, вы должны избегать использования вложенных классов вообще .

Если я правильно помню, Руководство по .NET Framework рекомендует против , также используя вложенные классы. Рекомендации по использованию вложенных типов немного устарел (до версии 1.1), но принципы все еще применяются.

Не используйте вложенные типы, если выполняются следующие условия:

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