C #: проблема при попытке определить класс, когда два пространства имен похожи - PullRequest
11 голосов
/ 26 мая 2010

Я столкнулся с проблемой, когда не могу сделать ссылку на класс в другом пространстве имен.У меня есть 2 класса:

namespace Foo
{
    public class Class1 { ... }
}

namespace My.App.Foo
{
    public class Class2
    {
        public void SomeMethod()
        {
            var x = new Foo.Class1; // compile error!
        }
    }
}

Ошибка компиляции:

Тип или имя пространства имен 'Class1' не существует в пространстве имен 'My.App.Foo'

В этой ситуации я не могу заставить Visual Studio распознать, что «Foo.Class1» относится к первому классу.Если я наведу курсор мыши на «Foo», это показывает, что он пытается разрешить это в «My.App.Foo.Class1»

Если я поставлю строку:

using Foo;

нав верхней части .cs файла, который содержит Class2, затем он также разрешает это в «My.App.Foo».

Есть ли какая-то хитрость для ссылки на правильное пространство имен «Foo» без переименования пространств имен, чтобыне конфликт?Оба эти пространства имен находятся в одной сборке.

Ответы [ 3 ]

28 голосов
/ 26 мая 2010

Вы можете использовать global:: для глобального определения пространства имен: global::Foo.Class1 должно работать,

Вы также можете использовать псевдоним global::Foo, чтобы упростить задачу. В верхней части исходного файла, под вашими утверждениями об использовании, добавьте:

using AliasClass1=global::Foo.Class1;

Теперь вы можете использовать:

AliasClass1 c = new AliasClass1();
// and so on.

Конечно, вы можете использовать лучшее имя, чем AliasClass: -)

3 голосов
/ 26 мая 2010

Помимо ответа Л.Бушкина, вас могут заинтересовать эти статьи Эрика Липперта:

Не называйте класс так же, как его пространство имен, часть первая
Не называйте класс так же, как его пространство имен, часть вторая
Не называйте класс так же, как его пространство имен, часть третья
Не называйте класс так же, как его пространство имен, часть четвертая

Они не имеют прямого отношения к вашей проблеме, но дают интересную информацию о стратегиях именования

3 голосов
/ 26 мая 2010
var x = new global::Foo.Class1();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...