第十二讲 命名空间_社会保障第十二讲
第十二讲 命名空间由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“社会保障第十二讲”。
命名空间(namespace)
在之前的学习中提到过命名空间(namespace),而且在所有的示例中都使用了System这个命名空间。System命名空间包含有大量的系统方法和类,.NET框架就是使用命名空间来组织和交流程序代码的。
学习重点:
理解命名空间的含义和C#应用程序的组织结构 掌握命名空间的定义和有效使用范围 掌握using语句的使用方法
12.1 命名空间
命名空间是用来限定名称的解析和使用范围的。比如,当我们处于家庭环境下,可以直呼小名;在工作单位就必须称呼全名;如到外地出差,还必须说明本人是某地某单位的某人。这其中,家庭、单位和外地就是不同的命名空间,也就是说,同一个人在不同的环境或场合(命名空间)下对他的称呼是不同的。
C#使用命名空间来管理和组织代码(管理各种类)。
12.2 定义命名空间
使用namespace关键字定义一个命名空间,格式为: namespace 命名空间名 { …….//命名空间的成员(其他命名空间或者类的定义 } 其中:
“命名空间名”是C#合法的标识符。也可以是用点运算符来构成命名空间的完全限定名。 在默认的情况下,命名空间具有public访问属性。不允许在定义命名空间时使用任何访问修饰符。
“命名空间的成员”可以是另一个命名空间或类型(类、结构、接口、枚举和代理)的定义。如果类型是命名空间的成员,则该类型只能具有public或internal访问修饰符,其中internal是默认的访问权限。
例:定义一个计数器命名空间 namespace Counter { cla DownCount { int v;public DownCount(int n){ v = n;} public void reset(int n){ v = n;} public int count(){ if(v > 0)return v--;else return 0;
} } }
说明:C#语言中,如果程序不定义命名空间,系统也将使用缺省的命名空间 System.Globalization(全局命名空间)。如果使用VS模板创建C#应用程序,会自动为我们定义一个与项目名字相同的命名空间,并把类组合在这个命名空间中。
12.3 使用命名空间
12.3.1 命名空间的完全限定名
我们通常使用命名空间的完全限定名来表示层次的命名空间。例如: namespace N1 { namespace N2 { cla A { } cla B { } } }上述语句等价于 namespace N1.N2 { cla A { } cla B { } } 也等价于
namespace N1.N2 { cla A { } } namespace N1.N2 { cla B { } } 在相同的命名空间不能存在名字相同的类型或命名空间;如果类型或命名空间位于不同的命名空间中,它们可以具有相同的名字。namespace N1.N2 { cla A { } cla B { } }
namespace N1.N3 { cla A { } cla B { } } 以下代码中有嵌套的类和命名空间,可以用命名空间和类的完全限定名来表示程序的嵌套关系。
namespace N1 //N1 { cla C1 //N1.C1 { cla C2 //N1.C1.C2 { } } namespace N2 //N1.N2 { cla C2 //N1.N2.C2 { } } } 命名空间N1是全局命名空间的一个成员,它的完全限定名就是N1。命名空间 N2 是N1的成员,它的完全限定名就是N1.N2。类C1是 N1 的一个成员,它的完全限定名就是N1.C1。
12.3.2 C#应用程序的组织结构 C#程序由一个或多个文件组成,每个文件可以包含一个或多个命名空间,而每个命名空间又可以包含各种数据类型,如类、结构、接口、枚举和代理,甚至包含其他命名空间。C#程序的基本框架如下:
using System;//引入命名空间
namespace MyNamespace1 //自定义命名空间 { cla MyCla1 { } //定义类 struct MyStruct1 { } //定义结构
interface MyInterface { } //定义接口 delegate int MyDelegate();//定义代理 enum MyEnum { } //定义枚举
namespace MyNamespace2 { } //定义嵌套命名空间 }
由此可见,C#应用程序是用命名空间来组织的:所有的C#程序都具有一个全局命名空间(global namespace),我们在程序中声明的所有顶层(不属于任何其他的命名空间)命名空间和类型都是这个全局命名空间的成员。在C#中有4种不同的命名空间。
全局命名空间:指在所有源代码文件顶层申明的命名空间或类型。每个C#程序都只有
一个全局命名空间。 命名空间:一个命名空间可以在多个源文件代码中多次声明,只要他们的完全限定名相同,就认定是同一个命名空间。
类型命名空间:类型(类、接口、结构)定义本身就声明了一个类型命名空间。类型的所有成员都属于这个命名空间。但是,基类和基接口不属于类型命名空间,所以在派生类或接口可以声明与基类或基接口同名的命名空间成员。 语句块命名空间:由花括号{}括起来的语句块等定义的一个命名空间。所有位于其中的本地变量定义或嵌套语句块都属于这个命名空间。
12.3.3 using 语句
C#中的using 语句为使用命名空间及其中定义的类型提供了方便的途径。我们可以将某个类封装在某个命名空间中,然后编译成类库(动态链接库.dll),在其他应用程序中使用using语句调用它。一个using语句的有效范围是在直接包含它的编译单元或命名空间定义体的内部。
使用命名空间的一般语句格式为:
using [别名=] 命名空间完全限定名;
1、命名空间using 语句
格式:using 命名空间完全限定名 using System;namespace N1.N2 { cla ClaA { } }
namespace N3 { using N1.N2;cla ClaB : ClaA { } }
using 语句只能导入命名空间中的类型成员,不能导入命名空间中的嵌套命名空间。namespace N1.N2 { cla ClaA { } }
namespace N3 { using N1;cla ClaB : ClaA { } //错误,命名空间N2未被导入 }
使用using 语句导入的命名空间可以包含此using语句的命名空间由相同名称的类成员。由于他们属于不同的命名空间,所以导入的类型将被新定义的类所隐藏。namespace N1.N2 { cla ClaA { } }
namespace N3 { using N1.N2;cla ClaA { } //新定义的类A将隐藏导入的命名空间N1.N2中的同名类N1.N2.ClaA }
如果使用using命名空间导入的多个命名空间中包含了同名的类,则不能直接通过类型名来使用这些类。由于具有二义性,所以要使用类型的完全限定名或使用它们的别名来引用指定的命名空间按的类。namespace N1 { cla A { } }
namespace N2 { cla A { } }
namespace N3 { using N1;using N2;//cla B:A //错误 cla B : N1.A { } }
2、别名using 语句
别名可以为一个命名空间或类定义一个别名,然后在程序中使用这个别名来引用相应的命名空间或类中的成员。
using 别名=命名空间或类的完全限定名; namespace N1.N2 { cla A { } }
namespace N3 { using A = N1.N2.A;cla B : A { } }
.NET 框架下主要命名空间是System(约有100个类),该命名空间中大约包含24个第二级命名空间。