C# 名称空间
名称空间提供了一种组织相关类和其他类型的方式。与文件或组件不同,名称空间是一种逻辑组合,而不是物理组合。在C#文件中定义类时,可以把它包括在名称空间定义中。以后,在定义另一个类(在另一个文件中执行相关操作)时,就可以在同一个名称空间中包含它,创建一个逻辑组合,该组合告诉使用类的其他开发人员:这两个类是如何相关的以及如何使用它们。
把一个类型放在名称空间中,可以有效地给这个类型指定一个较长的名称,该名称包括类型的名称空间,名称之间用句点(.)隔开,最后是类名。
可以在名称空间中嵌套其他名称空间,为类型创建层次结构:
namespace ProCSharp { namespace Demo { public class Test { } } }
一、using语句
名称空间相当长,输入起来很繁琐,用这种方式指定某个类也不总是必要的。如本章开头所述,C#允许简写类的全名。为此,要在文件的顶部列出类的名称空间,前面加上using关键字。
using ProCSharp.Demo;
二、名称空间的别名
using关键字的另一个用途是给类和名称空间指定别名。如果名称空间的名称非常长,又要在代码中多次引用,但不希望该名称空间的名称包含在using语句中(例如,避免类名冲突),就可以给该名称空间指定一个别名,其语法如下:
using alias = ProCSharp.Demo;
下面的例子给ProCSharp.Demo名称空间指定别名alias,并使用这个别名实例化了在该名称空间中定义的Test对象。注意名称空间别名的修饰符是“::”。因此将强制先从alias名称空间别名开始搜索。如果在相同的作用域中引入了alias类,就会发生冲突。即使出现了冲突,“::”运算符也允许引用别名。Test类有一个方法GetNamespace(),该方法调用每个类都有的GetType()方法,以访问表示类的类型的Type对象。下面使用这个对象来返回类的名称空间名:
using static System.Console; using alias = ProCSharp.Demo; namespace Demo { class Program { static void Main(string[] args) { alias::Test test = new alias.Test(); WriteLine(test.GetNamespace()); ReadLine(); } } } namespace ProCSharp.Demo { public class Test { public string GetNamespace() { return this.GetType().Namespace; } } }