命名空間是一種把相關程式碼分組、避免名稱衝突的方式,除了最簡單的程式碼庫之外,幾乎所有程式碼庫都會用到。
語法如下:
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 本身,都巢狀在一個外層的 static class <Color>RemoteControlCarTeam裡。這個外層類別唯一的用途,就是讓同名的型別能在程式中並存。用 namespace 來表達這件事會更好。下一個練習你會看到,就這些用途而言,namespace 比 static class 更有優勢。
雖然管理層堅持,團隊在定義中就該叫 RedRemoteControlCarTeam 和 BlueRemoteControlCarTeam,但引用團隊時這些名字實在有點笨重。請找出方法,在打造車子時改用較短的識別字 Red 和 Blue。