命名空间是一种把相关代码组织在一起、避免名称冲突的方式,除了最简单的代码库以外,几乎所有代码库都会用到它。
语法如下:
namespace MyNameSpace
{
public class MyClass {}
public class OtherClass {}
}
在命名空间作用域之外引用其中的类型时,需要用点号语法给类型名加上前缀。另一种更常见的做法是在文件开头(或某个命名空间内)加上 using 指令,这样使用类型时就不需要加前缀。在同一个命名空间内,则不需要限定类型名。
namespace MySpace
{
public class MyClass {}
public class Foo
{
public void Bar()
{
var baz = new MyClass();
}
}
}
public class Qux
{
public void Box()
{
var nux = new MySpace.MyClass();
}
}
namespace OtherSpace
{
using MySpace;
public class Tix
{
public void Jeg()
{
var lor = new MyClass();
}
}
}
你可以用 using MyAlias = MySpace; 这样的语法给命名空间起别名,之后凡是能使用该命名空间的地方,都可以使用这个别名。
管理层开始对遥控赛车项目 remote-control-competition 应用达尔文原则了。开发者被分成了两支队伍,Red 和 Blue,任务是各自独立地改进设计。他们不需要操心另一支队伍的设计决策。
你被要求看一下这些代码,看看如何才能最好地把两支队伍的成果合并起来用于测试。
请使用 namespaces 来更好地表达代码的意图。
目前,像 Motor 和 Telemetry 这样的重要类型,更不用说 RemoteControlCar 本身了,都嵌套在一个外围的静态类 <Color>RemoteControlCarTeam 里。这个外围类唯一的用途就是让同名的类型能够在程序中并存。用命名空间来表达这一点会更好。在下一个练习中你会看到,就这些用途而言,namespace 比 static class 更有优势。
尽管管理层坚持要在这两个定义中把队伍叫作 RedRemoteControlCarTeam 和 BlueRemoteControlCarTeam,但在引用这些队伍时,这些名字相当笨拙。想办法在构建赛车时使用更短的标识符 Red 和 Blue。