#c_sharp #net #классы
В open-source проекте не раз встречаю объявление классов внутри другого класса. Почему программисты поступают так? Ведь можно просто создать папку в решении (расширить пространство имен) и добавить туда необходимые файлы с классами и структурами. Пример такого объявления: public class ClassContainer { public const double SomeValue = 10; public class Foo { } public class Bar { } // ... } Может быть, существуют свои преимущества данного подхода? UPD. Я, кажется, узнал причину, почему классы находятся внутри других классов. Дело в том, что часть проекта была сгенерирована из файлов исходного кода языка с++ с помощью специального генератора кода, написанного на Python. Скорее всего, по этой причине классы обернуты еще одним классом.
Ответы
Ответ 1
Вложенные классы имеют доступ к скрытым от внешнего мира членам класса уровня выше. Можно спрятать какую-нибудь структуру внутри класса, если работа с ней снаружи не подразумевается и тогда эта структура не будет маячить в подсказках. В приведенном вами примере, если не используется первым пункт, то смысла особого нету если конечно же нету задела на будущее. По факту в таком виде, внешний класс внутреннему является чем-то вроде пространством имен.Ответ 2
Почему программисты поступают так? Сразу пример в виде структуры List.Enumerator. Вообще говоря, описание структуры внутри класса - вполне логичное решение при желании показать логическую связанность класса и структуры. С другой стороны - объявление private/protected классов или структур технически невозможно напрямую в пространствах имён, поэтому приходится оборачивать их во что-нибудь (например, класс).
Комментариев нет:
Отправить комментарий