C#命名空间和编译单元详解

需积分: 15 4 下载量 101 浏览量 更新于2024-09-14 收藏 70KB DOC 举报
C#命名空间和编译单元 命名空间是C#程序的组织系统,既用作程序的“内部”组织系统,也用作“外部”组织系统(一种向其他程序公开自己拥有的程序元素的方法)。在C#中,命名空间是用来组织相关的类、接口、委托和其他类型的集合。 9.1 编译单元 编译单元是C#程序的基本组成部分。一个编译单元是指一个源文件中的所有代码,包括using指令、global-attributes和namespace-member-declarations。编译单元的组成方式如下:先是零个或多个using-directives,后跟零个或多个global-attributes,然后是零个或多个namespace-member-declarations。 9.2 命名空间声明 命名空间声明是用来声明一个命名空间的。其组成方式如下:先是关键字namespace,后跟一个命名空间名称和体,然后加一个分号(可选)。例如: ```csharp namespace MyNamespace { class MyClass { } } ``` 9.3 using指令 using指令是用来使命名空间用起来更方便的。using指令可以分为两种:using别名指令和using命名空间指令。 9.3.1 Using别名指令 using别名指令是用来为一个命名空间或类型指定一个别名的。例如: ```csharp using MyAlias = MyNamespace.MyClass; ``` 9.3.2 Using命名空间指令 using命名空间指令是用来导入一个命名空间的。例如: ```csharp using MyNamespace; ``` 9.4 命名空间成员 命名空间成员是指命名空间中的类、接口、委托和其他类型。这些成员可以被其他程序访问和使用。 9.5 类型声明 类型声明是指在命名空间中的类、接口、委托和其他类型的声明。这些类型可以被其他程序访问和使用。 编译单元和命名空间的关系 一个C#程序由一个或多个编译单元组成,每个编译单元都用一个单独的源文件来保存。编译C#程序时,所有这些编译单元一起进行处理。因此,这些编译单元间可以互相依赖,甚至以循环方式互相依赖。 global-attributes global-attributes是用来指定目标程序集和模块的属性的。程序集和模块充当类型的物理容器。程序集可以包含若干个在物理上分离的模块。 namespace-member-declarations namespace-member-declarations是用来为一个称为“全局命名空间”的单个声明空间提供成员的。例如: ```csharp 文件A.cs: class A { } 文件B.cs: class B { } ``` 这两个编译单元是为该全局命名空间提供成员的,在本例中它们分别声明了具有完全限定名A和B的两个类。由于这两个编译单元为同一声明空间提供成员,因此如果它们分别包含了一个同名成员的声明,将会是个错误。