Структура пространства имен C # заставляет меня использовать псевдоним - PullRequest
2 голосов
/ 02 июля 2011

Я играю с пространствами имен и столкнулся с проблемой, которую не могу понять.

Моя структура пространства имен в данной библиотеке классов выглядит следующим образом:

Namespace History
Namespace History.Antiquity
Namespace History.Antiquity.East
Namespace History.Antiquity.West

Когда внутриИсходный файл, который объявляет историю пространства имен, я не могу использовать ни один из типов, определенных в History.Antiquity.East или History.Antiquity.West, без их полной квалификации или без их квалификации, начиная с "Античности".

Пример кода:

Следующий пример, например, дает мне ошибку во время компиляции (при условии, что тип «Персия» определен в History.Antiquity.East):

using History.Antiquity;

namespace History
{
    public class foo
    {
        public foo()
        {
            East.Persia.Conquer(); // error!
        }
    }

} 

Мне нужно либо полностью квалифицировать Персию, либо квалифицировать ее, начиная с античности.Кроме того, я могу ввести псевдоним:

using East = History.Antiquity.East;

Актуальный вопрос:

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

Ответы [ 4 ]

3 голосов
/ 02 июля 2011

Вы должны открыть пространство имен, чтобы увидеть его типы в C #. Типы из вложенных имен не отображаются автоматически. Итак, поместите в файл кода следующее:

using History.Antiquity.East;

Тогда вы можете напрямую получить доступ к своему типу следующим образом:

Persia.Conquer();

Кстати, ваши примеры кода выглядят как смесь VB, C # и C ++ / CLI ... какой язык вы на самом деле используете?

1 голос
/ 02 июля 2011

Код выдает ошибку, потому что он должен быть просто

using History.Antiquity;

Но добавление этого в код не означает, что вы можете просто обратиться к пространству имен History.Antiquity.Eastна East.

Что вы можете сделать, если вы находитесь в пространстве имен History, вы можете использовать Antiquity.East, но using s не влияет на это.

1 голос
/ 02 июля 2011

Хотя использование таких пространств имен в VB вполне приемлемо, C # не предназначен для такой работы.

0 голосов
/ 02 июля 2011
namespace History
{
    using Antiquity;

    public class foo {
        public foo() {
            East.Persia.Conquer(); // error!
        }
    }
}

Вы могли бы сделать что-то вроде этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...