Это преднамеренное правило C #. Если вы сделаете это:
namespace Frobozz
{
namespace Magic
{
class Lamp {}
}
class Foo
{
Magic.Lamp myLamp; // Legal; Magic means Frobozz.Magic when inside Frobozz
}
}
Это законно. Но это не так:
namespace Frobozz
{
namespace Magic
{
class Lamp {}
}
}
namespace Flathead
{
using Frobozz;
class Bar
{
Magic.Lamp myLamp; // Illegal; merely using Frobozz does not bring Magic into scope
}
}
Правило C #, которое описывает это, приведено в разделе 7.6.2 спецификации C # 4. Это очень запутанный раздел; бит, который вы хотите, это абзац в конце, который говорит
В противном случае, если пространства имен, импортированные директивами using-namespace декларации пространства имен, содержат ровно один тип с именем I ...
Ключевым моментом является то, что в нем говорится «ровно один тип», а не «ровно один тип или пространство имен ». Мы сознательно не разрешаем вам «нарезать» имя пространства имен, например , когда вы находитесь за пределами этого пространства имен , поскольку это может привести к путанице. Как уже говорили другие, если вы хотите делать подобные вещи, полностью уточните это один раз в директиве using-alias, а затем используйте псевдоним.