Ответ 1
Вы можете сделать это, используя идентификатор псевдонима пространства имен (обычно global::
) для ссылки на пространство имен по умолчанию /root:
global::Foo.Uber
using Foo.Uber;
namespace MyStuff.Foo
{
class SomeClass{
void DoStuff(){
// I want to reference the outer "absolute" Foo.Uber
// but the compiler thinks I'm refering to MyStuff.Foo.Uber
var x = Foo.Uber.Bar();
}
}
}
Как я могу это решить? Простое использование оператора using внутри моего пространства имен не помогает.
Вы можете сделать это, используя идентификатор псевдонима пространства имен (обычно global::
) для ссылки на пространство имен по умолчанию /root:
global::Foo.Uber
Фактически вы можете указать полный путь через корневое пространство имен
var x = global::Foo.Uber.Bar();
Обзор пространств имен
Пространство имен имеет следующее Свойства:
Они организуют проекты с большим кодом.
Они ограничены. оператор.
Директива using означает, что вам не нужно указывать имя пространство имен для каждого класса.
Пространство имен global является "корневым" пространством имен: global:: systemвсегда будет ссылаться на .NET. Framework namespace Система.
Я предпочитаю это по псевдонимам, потому что, когда вы читаете его, вы точно знаете, что происходит. Псевдонимы могут быть легко понятны, если вы пропустите определение.
Псевдоним пространства имен в операторе using:
using ThatOuterFoo = Foo.Uber;
...
...
//Some time later...
var x = ThatOuterFoo.Bar();
Вы можете использовать с помощью директив alias
using Outer = Foo.Uber;
namespace MyStuff.Foo
{
class SomeClass{
void DoStuff(){
var x = new Outer.Bar(); //outer class
}
}
}
Использование псевдонимаесессеза
using Foo.Uber;
using FooUberBar = Foo.Uber.Bar
namespace MyStuff.Foo
{
class SomeClass{
void DoStuff(){
// I want to reference the outer "absolute" Foo.Uber
// but the compiler thinks I'm refering to MyStuff.Foo.Uber
var x = FooUberBar();
}
}
}
Вы можете назначить псевдоним в своей директиве по использованию, как описано в MSDN.