命名空间 / 编程语言 · 2023年 10月 21日 0

命名空间

41 次浏览

命名空间减少大型应用程序的命名冲突。世界、国家或者一个家庭,都有自己的“命名空间”,有分而治之和各自为政的味道。

不同命名空间形式

  • C++引入命名空间namespace,C#同样支持。
  • Java使用package对应目录级别,更加严格,C#更加自由,不一定和目录对应。
  • C# 6.0 引入命名空间static修饰符,以支持静态函数。比如using static System.Console, 这样可以直接用WriteLine而不用加前缀Console.
  • 为了支援多级目录以及清晰的命名空间结构,C#/Java都支持命名空间分级,例如namespace xxx.yyy或package xxx.yyy. 毕竟命名空间不是实在的类型定义,更像是抽象的概念,支持嵌套很自然。
  • 引用多级命名空间写的很麻烦,C#引入using <alias_name> = <namespace xxx.yyy...> 设定精简别名。注意,别名可以和已有类相同。
    • 例如:using Console = System.Console;
  • XML 也有命名空间,以便于区分不同domain元素和属性。
  • Java/仓颉 用 package 支持不同命名空间。

命名空间通配符

  • C# using 引入命名空间,不会嵌套包含内部命名空间,如需要,必须显式引入。
  • Java 提供通配符 * 可引入仅当前级别的全部子命名空间。

全局引入命名空间

  • C# 10.0 引入 global using,一个文件中用此方式,此工程其他地方都不需要,默认都会引用。此举大幅减少工程文件大量重复的using代码。
  • VB.NET 同样提供项目级别配置的Imports作用于整个项目。

一定需要引入命名空间?

  • C# 使用 string 不需要引入System命名空间,使用 String 就需要引入System.

何处引入命名空间?

尽管大部分情况下,引入命名空间放在源代码开始,但依然可以只在特定范围引入命名空间。

  • C# 允许在命名空间里用using, 此处的using只作用于此命名空间。