次の方法で共有


Не давайте классам и пространствам имен одинаковые имена. Часть 4

Часть 4. Делаем проблему еще серьезнее

Как я уже сказал ранее, фундаментальная задача пространств имен заключается, прежде всего, в организации типов в иерархии, а не в разделении двух сущностей с одинаковыми именами. Но предположим, что вы поместили нечто в пространство имен, поскольку у вас есть две сущности с одинаковыми именами и должны находиться раздельно. Предположим, вы руководствовались следующей логикой: «Я собираюсь поместить класс List в свое собственное пространство имен, поскольку имя List может конфликтовать с другим классом с именем List. У пользователя должна быть возможность уточнить, какой тип ему нужен.»

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

Давайте предположим, что именно эта причина побудила к созданию пространства имен MyContainers и затем к созданию нового подпространства имен – MyContainers.X, в котором и будет располагаться класс List. Какое имя следует выбрать для X? Если ключевой момент заключается в том, что в той области видимости, в которой находятся элементы пространства имен MyContainers, имеется еще один тип с именем List, тогда выбор “List” для “X” усугубляет проблему, но никак не решает ее! До этого, в одной области видимости у вас были две сущности с именем List. Теперь у вас стало три сущности с таким именем: две из которых находятся в одной области видимости. Это лишь дополнительно сбивает с толку, но при этом не решает никакой проблемы: у вас как были, так и остались две сущности с именем List в одной области видимости.

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

Оригинал статьи