Travaillez-vous dans un espace de noms qui se trouve sous l'espace de noms A.B? (Par exemple ABX) si tel est le C# résolutions d'espace de noms (ECMA-334 C# Language Specification : 10.8 10.8 Namespace and type names) dit:
... pour chaque espace de noms N, à partir avec l'espace de noms dans lequel le espace de noms ou typename se produit, continue à chaque enfermant l'espace de noms (le cas échéant), et se terminant par l'espace de noms global, les étapes suivantes sont évaluées jusqu'à ce qu'une entité est située ...
puis suivis par:
Si K est égal à zéro et l'espace de noms déclaration contient un -extern aliasdirective ou à l'aide-aliasdirective qui associe le nom I avec un espace de noms importé ou le type, l'espace de noms ou type- nom fait référence à cet espace de noms ou tapez
cela signifie que la résolution de nom commence à l'espace de noms en cours et recherche tous les espaces de noms jusqu'à la racine, et seulement après cette recherche hiérarchique se termine, puis les espaces de noms importés avec la clause using
sont se arqué.
Les impressions exemple suivant « 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();
}
}
}
Edit: Ajout d'une clause à l'aide à l'intérieur un espace de noms, va faire en sorte que l'espace de noms est recherché avant la recherche hiérarchique de l'espace de noms actuel est fait est terminé.Modifier l'exemple à:
namespace Ns1.Foo.Bar
{
using Ns1.Foo.Foo2;
class Bar
{
public void Print()
{
new Foo().Print();
}
static void Main()
{
new Bar().Print();
}
}
}
et Ns1.Foo.Foo2
seront imprimés.
Édition: modifié l'exemple