AB 名前空間の下にある名前空間で作業していますか? (たとえば、ABX) C# 名前空間の解決 ( ECMA-334 C# 言語仕様: 10.8 10.8 名前空間と型名) の場合:
... 名前空間 N ごとに、namespace-or-typename が発生する名前空間から始まり、各囲み名前空間 (存在する場合) に続き、グローバル名前空間で終わると、エンティティが見つかるまで次の手順が評価されます。 ..
そして、次が続きます:
K がゼロで、名前空間宣言に名前 I をインポートされた名前空間または型に関連付ける extern-alias-directive または using-aliasdirective が含まれている場合、namespace-or-type-name はその名前空間または型を参照します。
これは、名前解決が現在の名前空間から始まり、ルートまでのすべての名前空間を検索し、この階層検索が終了した後にのみ、using
句でインポートされた名前空間が検索されることを意味します。
次の例は、「Ns1.Foo」を出力します。
using Ns1.Foo.Foo2;
namespace Ns1.Foo
{
class Foo
{
public void Print()
{
System.Console.WriteLine("Ns1.Foo");
}
}
}
namespace Ns1.Foo.Foo2
{
class Foo
{
public void Print()
{
System.Console.WriteLine("Ns1.Foo.Foo2");
}
}
}
namespace Ns1.Foo.Bar
{
class Bar
{
public void Print()
{
new Foo().Print();
}
static void Main()
{
new Bar().Print();
}
}
}
編集:名前空間内に using 句を追加すると、現在の名前空間の階層検索が行われる前に名前空間が検索されるようになります。例を次のように変更します。
namespace Ns1.Foo.Bar
{
using Ns1.Foo.Foo2;
class Bar
{
public void Print()
{
new Foo().Print();
}
static void Main()
{
new Bar().Print();
}
}
}
とNs1.Foo.Foo2
印刷されます。
編集:変更された例