C# namespace:命名空间
在 C# 中,可以将命名空间看作是一个范围,用来标注命名空间中成员的归属,一个命名空间中类与另一个命名空间中同名的类互不冲突,但在同一个命名空间中类的名称必须是唯一的。
举个简单的例子,在一个简单的 C# 程序中,假如我们要输出某些数据,就需要使用System.Console.WriteLine(),其中 System 就是命名空间,而 Console 是类的名字,WriteLine 则是具体要使用方法。也就是说,如果要访问某个命名空间中的类,我们需要使用namespacename.classname.funcname()的形式。当然也可以使用 using 关键字来引用需要的命名空间,例如using System,这样我们就可以直接使用Console.WriteLine()来输出指定的数据了。
命名空间的结构类似于我们计算机系统中的目录,我们可以将某个目录看作是一个命名空间,在这个目录下可以存在若干不同的文件夹,这些文件夹就可以看作是命名空间下的类。而在每个文件夹下又存放着一些文件或文件夹,这些文件和文件夹则可以看作是类中的成员。
使用命名空间的好处是可以避免命名冲突,同时也便于查找类的位置。
定义命名空间
在 C# 中定义命名空间需要使用 namespace 关键字,语法格式如下:
namespace namespaceName{ // 命名空间中的代码 }
若要调用指定命名空间下的成员,则需要使用namespaceName.className.funcName()的形式,下面通过一个示例来演示命名空间的使用:
namespace net.yinzhong { class Demo { static void Main(string[] args) { First.demoClass demo1 = new First.demoClass(); Second.demoClass demo2 = new Second.demoClass(); demo1.sayHello(); demo2.sayHello(); } } } namespace First{ public class demoClass{ public void sayHello(){ System.Console.WriteLine("First 命名空间下 demoClass 类中的 sayHello 函数"); } } } namespace Second{ public class demoClass{ public void sayHello(){ System.Console.WriteLine("Second 命名空间下 demoClass 类中的 sayHello 函数"); } } }
运行结果如下:
First 命名空间下 demoClass 类中的 sayHello 函数 Second 命名空间下 demoClass 类中的 sayHello 函数
using关键字
using 关键字用来引用指定的命名空间,它可以告诉编译器后面的代码中我们需要用到某个命名空间。例如我们在程序中需要使用到 System 命名空间,只需要在程序的开始使用using System引用该命名空间即可,这时我们在使用 System 命名空间下的类时就可以将System.省略,例如Console.WriteLine();。下面通过一个示例演示一下:
using System; using First; using Second; namespace net.yinzhong { class Demo { static void Main(string[] args) { firstClass first = new firstClass(); secondClass second = new secondClass(); first.sayHello(); second.sayHello(); } } } namespace First{ public class firstClass{ public void sayHello(){ System.Console.WriteLine("First 命名空间下 demoClass 类中的 sayHello 函数"); } } } namespace Second{ public class secondClass{ public void sayHello(){ System.Console.WriteLine("Second 命名空间下 demoClass 类中的 sayHello 函数"); } } }
运行结果如下:
First 命名空间下 demoClass 类中的 sayHello 函数 Second 命名空间下 demoClass 类中的 sayHello 函数
命名空间嵌套
命名空间可以嵌套使用,也就是说我们可以在一个命名空间中再定义一个或几个命名空间,如下所示:
namespace namespaceName1{ // namespaceName1 下的代码 namespace namespaceName2{ // namespaceName2 下的代码 } }
您可以使用点.运算符来访问嵌套的命名空间成员,例如namespaceName1.namespaceName2。下面通过示例来演示一下命名空间的嵌套使用:
using System; using First; using First.Second; namespace net.yinzhong { class Demo { static void Main(string[] args) { firstClass first = new firstClass(); secondClass second = new secondClass(); first.sayHello(); second.sayHello(); } } } namespace First{ public class firstClass{ public void sayHello(){ System.Console.WriteLine("First 命名空间下 demoClass 类中的 sayHello 函数"); } } namespace Second{ public class secondClass{ public void sayHello(){ System.Console.WriteLine("Second 命名空间下 demoClass 类中的 sayHello 函数"); } } } }
运行结果如下:
First 命名空间下 demoClass 类中的 sayHello 函数 Second 命名空间下 demoClass 类中的 sayHello 函数