Страницы

Поиск по вопросам

понедельник, 9 декабря 2019 г.

Объявление класса/структуры внутри другого класса: достоинства и недостатки

#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 классов или структур технически невозможно напрямую в пространствах имён, поэтому приходится оборачивать их во что-нибудь (например, класс).

Комментариев нет:

Отправить комментарий