C# 命名空间(Namespace)
命名空间的设计目的是提供一种让一组名称与其他名称分隔开的方式。在一个命名空间中声明的类的名称与另一个命名空间中声明的相同的类的名称不冲突。
我们举一个计算机系统中的例子,一个文件夹(目录)中可以包含多个文件夹,每个文件夹中不能有相同的文件名,但不同文件夹中的文件可以重名。
定义命名空间
命名空间的定义是以关键字 namespace 开始,后跟命名空间的名称,如下所示:
1 2 3 4 | namespace namespace_name { // 代码声明 } |
为了调用支持命名空间版本的函数或变量,会把命名空间的名称置于前面,如下所示:
1 | namespace_name.item_name; |
下面的程序演示了命名空间的用法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | using System; namespace first_space { class namespace_cl { public void func() { Console.WriteLine( "Inside first_space" ); } } } namespace second_space { class namespace_cl { public void func() { Console.WriteLine( "Inside second_space" ); } } } class TestClass { static void Main( string [] args) { first_space.namespace_cl fc = new first_space.namespace_cl(); second_space.namespace_cl sc = new second_space.namespace_cl(); fc.func(); sc.func(); Console.ReadKey(); } } |
当上面的代码被编译和执行时,它会产生下列结果:
1 2 | Inside first_space Inside second_space |
using 关键字
using 关键字表明程序使用的是给定命名空间中的名称。例如,我们在程序中使用 System 命名空间,其中定义了类 Console。我们可以只写:
1 | Console.WriteLine ( "Hello there" ); |
我们可以写完全限定名称,如下:
1 | System.Console.WriteLine( "Hello there" ); |
您也可以使用 using 命名空间指令,这样在使用的时候就不用在前面加上命名空间名称。该指令告诉编译器随后的代码使用了指定命名空间中的名称。下面的代码演示了命名空间的应用。
让我们使用 using 指定重写上面的实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | using System; using first_space; using second_space; namespace first_space { class abc { public void func() { Console.WriteLine( "Inside first_space" ); } } } namespace second_space { class efg { public void func() { Console.WriteLine( "Inside second_space" ); } } } class TestClass { static void Main( string [] args) { abc fc = new abc(); efg sc = new efg(); fc.func(); sc.func(); Console.ReadKey(); } } |
当上面的代码被编译和执行时,它会产生下列结果:
1 2 | Inside first_space Inside second_space |
嵌套命名空间
命名空间可以被嵌套,即您可以在一个命名空间内定义另一个命名空间,如下所示:
1 2 3 4 5 6 7 8 | namespace namespace_name1 { // 代码声明 namespace namespace_name2 { // 代码声明 } } |
您可以使用点(.)运算符访问嵌套的命名空间的成员,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | using System; using SomeNameSpace; using SomeNameSpace.Nested; namespace SomeNameSpace { public class MyClass { static void Main() { Console.WriteLine( "In SomeNameSpace" ); Nested.NestedNameSpaceClass.SayHello(); } } // 内嵌命名空间 namespace Nested { public class NestedNameSpaceClass { public static void SayHello() { Console.WriteLine( "In Nested" ); } } } } |
当上面的代码被编译和执行时,它会产生下列结果:
1 2 | In SomeNameSpace In Nested |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了