16.2.1 名字空間的聲明
名字空間的聲明是關鍵字"namespace"後面跟名字空間名和名字空間主體,然後還可以跟一個分號。格式如下:
namespace qualified-identifier namespace-body;
名字空間的聲明要麼在編譯單元(源文件)的第一行出現,要麼作為成員出現在其它名字空間的聲明之中。首次聲明的名字空間是全局名字空間的成員,在別的名字空間內部聲明的名字空間作為外部名字空間的成員。在這兩種情況下,名字空間都不允許出現重名。
名字空間隱式地使用public修飾符,在聲明時不允許使用任何訪問修飾符。
下面這種形式可以采用非嵌套的語法來實現名字空間的嵌套聲明:
namespace N1.N2 { class A{} class B{} } 上述代碼等價於: namespace N1 { namespace N2 { class A{} class B{} } }
16.2.2 成員與類型聲明
名字空間的成員可以是一個類型(類、結構、接口、枚舉或代表),也可以是另一個名字空間。一個編譯單元或名字空間主體中可以包含多個成員聲明,這些聲明給編譯單元或名字空間主體中添加了新的成員。
名字空間中的類型聲明可以是類的聲明、結構的聲明、接口的聲明、枚舉的聲明,或者是代表的聲明。
一個類型聲明可以在編譯單元的第一行作為頂層聲明出現,也可以出現在編譯單元的內部,作為成員聲明。類型聲明還可以是在名字空間、類或結構的內部作為成員聲明出現。
對類型聲明的訪問權限與類型聲明所處的位置有關:
●對在編譯單元中一開始就聲明的類型,訪問權限可以是公有(public)的,也可以是內部(internal)的。默認的訪問權限是內部的。
●在類中聲明的類型,訪問權限可以是公有(public)的,保護(protected)的,內部(internal)的,或是私有(private)的。默認的訪問方式是私有的。
在結構聲明的類型,訪問權限可以是公有(public)的,內部(internal)的,或是私有(private)的。默認的訪問方式是私有的。
16.2.3 改寫“Welcome”程序
為了演示名字空間的基本用法,我們把第三章的“Welcome”程序分為庫和控制台兩部分。庫用來提供顯示的消息,控制台程序執行顯示。
首先讓我們看一下庫文件,其中包含了一個WelcomeMessage類。
程序清單16-1:
//庫文件 WelcomeLibrary.cs namespace MyProgram.CSharp.FirstApp { public class Welcome.Message { string m_message; public WelcomeMessage() { m_message="Welcome!"; } public string Message{ get{ return m_message; } set{ m_message=value; } } } }
上面的代碼展示了在名字空間MyProgram.CSharp.FirstApp定義的類WelcomeMessage,類WelcomeMessage提供了可讀的屬性Message。我們看到,名字空間可以嵌套,比如聲明:
namespace MyProgram.CSharp.FirstApp
{...}
實際上是以下多層名字空間的嵌套:
namespace MyProgram { namespace CSharp { namespace FirstApp {...} } }
“Welcome”程序組件化的下一步就是編寫客戶控制台程序,客戶程序將使用庫中提供的類WelcomeMessage。實際上WelcomeMessage這個類的全名應該是MyProgram.CSharp.FirstApp.WelcomeMessage,但這種方法使用的書寫的名字太長,顯得過於笨拙。一個簡單的方法是預先導入名字空間,這樣就可以不通過全名來使用名字空間的所有類型。
程序清單16-2:
//客戶程序源文件WelcomeApp.cs using System; using MyProgram.CSharp.FirstApp; class WelcomeApp { public static void Main(){ WelcomeMessage M=new WelcomeMessage(); System.Console.WriteLine(M.Message); System.Console.WriteLine("Please Enter your name:"); string input=System.Console.ReadLine(); M.Message="Welcome"+input; System.Console.WriteLine(M.Message); } }
上例中,導入了名字空間MyProgram.CSharp.FirstApp後,每次出現的WelcomeMessage實際上就是MyProgram.CSharp.FirstApp.WelcomeMessage的簡寫。
我們寫的代碼可以編譯後產生一個包含類WelcomeMessage的庫,以及一個包含類WelcomeApp的應用程序。具體的編譯步驟的細節,可能會因為使用編譯器或工具的不同而不同。使用Visual Studio 7.0提供的命令行編譯器,正確的語法應該是:
csc /target:library WelcomeLibrary.cs
上面這條語句產生WelcomeLibrary.dll類庫。
csc /reference:WelcomeLibrary.dll WelcomeApp.cs
上面這條語句產生WelcomeApp.exe應用程序。