引用
using LT = LevelOne.LevelTwo;
namespace LevelOne
{
// name "NameThree" defined
namespace LevelTwo
{
// name "NameThree" defined
}
}
全局名称空间中的代码和LevelOne名称空间中的代码就可以使用LT.NameThree。
需要注意特别重要的一点:using语句本身不能访问另一个名称空间中的名称。除非名称空间中 的代码以某种方式链接到项目上,或者代码是在该项目的源文件中定义的,或者链接到该项目的其 他代码中定义的,否则就不能访问其中包含的名称。到外,如果包含名称空间的代码链接到项目上, 无论是否使用using,都可以访问其中包含的名称。using语句便于我们访问这些名称,减少代码量,
以及提高可读性。
实际测试
namespace _002.命名空间二
{
using _002.名称空间.Z.A.B;
class C
{
public static void Main()
{
D d = new D();//这里不会调用A命名空间中的D类,如果C命名空间没有D类,那么会调用B命名空间中的D类。
d.Print();
}
}
class D
{
public void Print()
{
Console.WriteLine("这里是命名空间D");
}
}
}
namespace _002.名称空间
{
namespace Z
{
class D
{
public void Print()
{
Console.WriteLine("这里是命名空间Z");
}
}
namespace A
{
class D
{
public void Print()
{
Console.WriteLine("这里是命名空间A");
}
}
namespace B
{
class E
{
public static void Print()//如果这里改成Main方法,B中没有D类,那么自动调用A命名空间中D类,A中没有D自动调用Z命名空间中的D类
{
D d = new D();
d.Print();
Console.WriteLine("________________________");
}
}
class D
{
public void Print()
{
Console.WriteLine("这里是命名空间B");
}
}
}
}
}
}
总结
在using时
- 命名空间之间的嵌套优先使用级:本空间->using中的最后一个空间
- 不会使用using最后一个空间的上级空间
在命名空间的定义时
- 命名空间之间的嵌套优先使用级:本空间->上级逐层