命名空间
命名空间关键字namespace
using System;
namespace First.two.three//每个命名中间.的点表示嵌套,跟下面相同的层次结构
{
class Class1 { }
class Class2 { }
}
class Class5
{
//这里的class5也相当于是在全局空间中
}
namespace First //上面这段等于下面这段
{
namespace two
{
namespace three
{
class Class3 { }
class Class4 { }
}
}
}
using
using System;//using指令可导入一个命名空间,允许不需要类型的全名就可以使用该类型
using static System.Console;//这里加了Console之后,下面的WriteLine就可以直接使用
class Test2
{
static void Main()
{
Console.WriteLine("a");
}
}
命名空间里的规则
命名的范围:在外层空间声明的名称可以直接在内部的命名空间直接使用,无需全名
using System;
namespace First
{
namespace three
{
class Class3 { }
//这里引用的时候就可以不用再打First Two全名,直接Two
}
namespace Tea
{
class FEEE : three.Class3 { }//分支引用时打他的命名空间和类型,用点隔开。这个叫做部分全名
}
}
在class Foo用的是Outer.Inner.Foo,如果要用Outer里面的Foo,得用它的全名Outer.Foo
(用的时候都是默认用的内层)
重复的命名空间
可以重复声明命名空间,只要它们没有冲突的类型名即可
using System;
namespace First
{
namespace three
{
class Class3 { }
}
namespace three
{
class Class3 { }//这样就是不允许的,只要改下类型名即可
}
}
嵌套using指令
在N2里面用了using -N1,那class1也只能在N2-using N1这个命名空间里使用
到另外一个命名空间里就无法使用了
为命名空间-类型起别名
//using PR = System.First.three.Class3; 用PR起他们的一个别名
//class Program {PR.three l;} 然后开头用PR.任何一个类都可以
命名空间的高级特性
//利用using给两个类型名字都一样的起两个别名
//例如用extern alias x1;
//extern alias x2;两行
//用的时候就
class text
{
Static void Main()
{
x1.某某要引用的类型 = new x1.某某要引用的类型();
x2.某某要引用的类型 = new x2.某某要引用的类型();
}
}