一周学会 C# (命名空间)
C# 才鸟( QQ:249178521 )
1. 问题
· ** 越大的程序包含的名字越多 ** ** **
w ** 越多的名字 ** ** - ** ** 越大的可能性导致命名冲突 ** ** **
w ** 你是怎样命名以反映结构 ** ** **
w ** 显式的前缀不是一个很好的解决方法 ** ** **
** sealed class Book **
** { **
** ... **
** } **
** sealed class GUIBook **
** { **
** ... **
** } **
** // ** ** 传统的命名方法 **
2. 解决的方法
· ** 一个命名空间是一个逻辑的命名系统 ** ** **
w ** 命名空间表示一个范围 ** ** **
w ** 任何 ** ** .cs ** ** 文件中都可以在任一命名空间中插入类 ** ** **
w ** 单独的一个 ** ** .cs ** ** 文件可以访问多个命名空间 ** ** **
** namespace GUI **
** { **
** sealed class Book **
** { **
** ... **
** } **
** } **
** // ** ** 命名空间的解决方法 **
使用命名空间的方法可以反映程序中的逻辑关系。上面的例子说明你在 GUI 命名空间中声明了一个类叫 Book ,而不是使用 GUIBook 这么长的名字。
3. 嵌套的命名空间
· ** 一个命名空间可以包含其他的命名空间 ** ** **
w ** 使用嵌套来反映程序的结构 ** ** ** ** **
w ** 命名空间总是隐含为 ** ** public ** ** **
** namespace RainForest **
** { **
** namespace GUI **
** { **
** sealed class Book **
** { **
** ... **
** } **
** } **
** } **
** namespace ** ** RainForest.GUI **
** { **
** ** ** sealed ** ** ** ** class ** ** Book **
** { **
** ... **
** } **
** } **
上面两个程序是等价的。
命名空间可以包含类和其他的命名空间,但不能包含数据。
嵌套的命名空间之间的结构反映了程序组织的逻辑结构。
命名空间隐含为 public ,也就是说命名空间的声明不能包含任何访问修饰符,连 public 也不能加。命名空间之所以隐含为 public 是因为这样任何一个程序的任何一部分都可以访问它。还必须注意的是,因为命名空间是隐含为 public ,所以它的命名应使用 PascalCase 命名规则,即所有单词的首字母大写。
嵌套的命名空间可以非常有效地组织大型程序的逻辑结构。但是每一层都重复键入关键字 namespace 的话,那将是非常繁的。但正如上面的例子中所示的,你可以使用简写的方法。
4. 全名
· ** 命名空间反映的是逻辑结构 ** ** **
w ** 带点的全名称是冗长和讨人厌的 ** ** **
w ** 但它比不带点的名字要好 ** ** **
** namespace RainForest.GUI **
** { **
** sealed class Book **
** { **
** ... **
** private System.Collections.Hashtable pages; **
** } **
** } **
命名空间的使用可以避免命名冲突,但是它会导致名字的长度增加。例如, .NET framework 有一个类叫 Hashtable 。这个类位于 Collections 命名空间,而 Collections 命名空间又位于 System 命名空间,这就意味着 Hashtable 类的全名是 System.Collections.Hashtable (好长啊)。
5.using 标记
· ** using ** ** 标记使类在命名空间中可见 ** ** **
w ** 只能在一个命名空间的开头使用 ** ** **
** namespace RainForest.GUI **
** { **
** using System.Collections; **
** ... **
** sealed class Book **
** { **
** ... **
** private Hashtable pages; **
** } **
** } **
using 标识只能用在命名空间的开头,放在任何类声明语句的开头。 using 标识符的作用是能够使用简写的形式来调用该命名空间中的类。例如在上面的例子中, Book 类声明了一个私有字段 pages ,它是 Hashtable 类的。 Book 类声明这个字段时使用的是简写形式,而不是它的全名 System.Collections.Hashtable 。
· ** using ** ** 标记也可以被用在 ** ** .cs ** ** 文件的开头 ** ** **
** using System; // ** ** 表示全局空间 **
** sealed class Global **
** { **
** static void Main (string[] args) **
** { **
** Console.Write(args[0]); **
** } **
** } **
6. 引用别名
· **_ using _ ** ** ** ** 别名 ** ** ** ** 产生一个别名用于: ** ** **
w ** 类或命名空间 ** ** **
w ** 只能被用在命名空间的开头 ** ** **
** namespace RainForest.GUI **
** { **
** using Hashtable = System.Collections.Hashtable; **
** sealed class Book **
** { **
** ... ** <SPAN lang=EN-GB st