跳至内容

C# 编程/命名空间

来自维基教科书,开放的书籍,用于开放的世界

命名空间用于提供应用程序所在的“命名空间”。它们特别用于为 C# 编译器提供程序中所有命名信息的上下文,例如变量名。例如,如果没有命名空间,您将无法创建名为 Console 的类,因为 .NET 已经在其 System 命名空间中使用了一个。命名空间的目的是解决这个问题,并为您的应用程序释放 .NET Framework 中定义的数千个名称,以及让您的应用程序不会占用其他应用程序的名称,如果您的应用程序旨在与另一个应用程序结合使用。因此,命名空间的存在是为了解决编译器否则无法做到的歧义。

命名空间可以用这种方式轻松定义

 namespace MyApplication
 {
     // The content to reside in the MyApplication namespace is placed here.
 }

.NET Framework 为您提供了整个命名空间层次结构,其中 System 命名空间通常是最常见的命名空间。命名空间中的数据可以通过使用 . 运算符来引用,例如

 System.Console.WriteLine("Hello, World!");

这将调用 WriteLine 方法,该方法是 System 命名空间中 Console 类的成员。

通过使用 using 关键字,您可以明确告诉编译器您将在程序中使用某个命名空间。由于编译器将知道这一点,因此它不再要求您为声明的命名空间键入命名空间名称,因为您已经告诉它应该在哪些命名空间中查找,如果它在您的应用程序中找不到数据。

因此,您可以像这样键入

 using System;
 
 namespace MyApplication
 {
   class MyClass
   {
     void ShowGreeting()
     {
         Console.WriteLine("Hello, World!"); // note how System is now not required
     }
   }
 }

命名空间是全局的,因此在一个 C# 源文件中存在的命名空间与另一个源文件中具有相同名称的命名空间将导致编译器将这两个源文件中不同的命名信息视为驻留在同一个命名空间中。

嵌套命名空间

[编辑 | 编辑源代码]

通常,您的整个应用程序都驻留在它自己的特殊命名空间下,通常以您的应用程序或项目名称命名。有时,拥有整个产品系列的公司会决定使用嵌套命名空间,其中“根”命名空间可以共享公司的名称,而嵌套命名空间则共享各自的项目名称。如果您是一位开发人员,并且已经制作了一个具有可以在不同程序之间共享的常用功能的库,那么这将特别方便。如果库和您的程序共享一个父命名空间,那么就不必使用 using 关键字明确声明它,并且也不必完全键入它。如果您的代码对其他人开放使用,那么使用您的代码的第三方开发人员会看到,相同公司开发了库和程序。最后,库和程序的开发人员还会将产品源代码中的所有命名信息分开,这样可以减少头痛,尤其是当使用通用名称时。

要使您的应用程序驻留在嵌套命名空间中,您可以用两种方式来显示它。要么这样

 namespace CodeWorks
 {
     namespace MyApplication
     {
         // Do stuff
     }
 }

... 或像这样

 namespace CodeWorks.MyApplication
 {
     // Do stuff
 }

两种方法都是可接受的,并且在它们的作用上是相同的。

华夏公益教科书