Вопрос о пространстве имен C #: нужно ли избегать совпадения имен классов, содержащих имена классов? - PullRequest
2 голосов
/ 10 октября 2019

Я нахожу некоторое разочарование тем, как C # обрабатывает пространства имен, когда я хочу сослаться на класс, имя класса которого совпадает с частью пространства имен текущего класса. Это приведет к ошибке компилятора: «Класс» является пространством имен, но используется как тип ».

Рассмотрим следующий пример кода, который демонстрирует проблему:

namespace A.B.C
{
    public class Y
    {      
    }
}

namespace X.Y.Z
{
    public class Class1
    {
        public Y MyProp;
    }
}

В этомВ этом случае я хочу использовать класс "Y" из пространства имен "ABC". Но поскольку «Y» также является одной из частей пространства имен, C # рассматривает «Y» как пространство имен, а не как тип.

Я могу обойти это, полностью указав имя класса «ABCY» или используя псевдоним, но я бы предпочел, чтобы C # не рассматривал «Y» как пространство имен в этом контексте. Часто у меня есть код, такой как тестовый код, который содержит те же пространства имен, что и классы, которые он тестирует, и такого рода коллизия классов / пространств имен означает, что мне нужно быть гораздо более многословным при настройке.

Я неконечно, как называется этот процесс, но кажется, что при разрешении классов и пространств имен C # будет проходить вверх по пространствам имен, пока не найдет часть пространства имен, которая соответствует. В этом случае он подходит и находит Y. Есть ли способ сказать C # не ходить, не разрешать это частичное совпадение пространства имен?

1 Ответ

6 голосов
/ 10 октября 2019

Если вы напишите using A.B.C; (пространство имен, в котором находится Y) внутри namespace X.Y.Z, ошибка исчезнет:

namespace X.Y.Z
{
    using A.B.C;
    public class Class1
    {
        public Y MyProp;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...