除了依賴於幾個系統提供的類(如 SystemConsole)到目前為止介紹的程序都是獨立存在的但更常見的情況是實際的應用程序由若干不同的部分組成每個部分分別進行編譯例如企業級應用程序可能依賴於若干不同的組件其中包括某些內部開發的組件和某些從獨立軟件供應商處購買的組件
命名空間和程序集有助於開發基於組件的系統命名空間提供一個邏輯組織體系命名空間既用作程序的內部組織體系也用作外部組織體系(一種表示向其他程序公開程序元素的途徑)
程序集用於物理打包和部署程序集可以包含類型用於實現這些類型的可執行代碼以及對其他程序集的引用
有兩種主要的程序集應用程序和庫應用程序有一個主入口點通常具有 exe 文件擴展名而庫沒有主入口點通常具有 dll 文件擴展名
為了說明命名空間和程序集的使用本節再次以前面介紹的hello world程序為例並將它分為兩個部分提供消息的類庫和顯示消息的控制台應用程序
這個類庫僅含一個名為 HelloMessage 的類示例
// HelloLibrarycs
namespace MicrosoftCSharpIntroduction
{
public class HelloMessage
{
public string Message {
get {
return hello world;
}
}
}
}
顯示了名為 MicrosoftCSharpIntroduction 的命名空間中的 HelloMessage 類HelloMessage 類提供一個名為 Message 的只讀屬性命名空間可以嵌套而聲明
namespace MicrosoftCSharpIntroduction
{}
僅是若干層命名空間嵌套的簡寫形式若不簡化則應該像下面這樣聲明
namespace Microsoft
{
namespace CSharp
{
namespace Introduction
{}
}
}
將hello world組件化的下一個步驟是編寫使用 HelloMessage 類的控制台應用程序可以使用此類的完全限定名 MicrosoftCSharpIntroductionHelloMessage但該名稱太長使用起來不方便一種更方便的方法是使用using 命名空間指令這樣使用相應的命名空間中的所有類型時就不必加限定名稱示例
// HelloAppcs
using MicrosoftCSharpIntroduction;
class HelloApp
{
static void Main() {
HelloMessage m = new HelloMessage();
SystemConsoleWriteLine(mMessage);
}
}
顯示了一個引用 MicrosoftCSharpIntroduction 命名空間的 using 命名空間指令這樣HelloMessage 就成為 MicrosoftCSharpIntroductionHelloMessage 的簡寫形式
C# 還允許定義和使用別名using 別名指令定義類型的別名當兩個類庫之間發生名稱沖突時或者當使用大得多的命名空間中的少數類型時這類別名很有用示例
using MessageSource = MicrosoftCSharpIntroductionHelloMessage;
顯示了一個 using 別名指令該指令將 MessageSource 定義為 HelloMessage 類的別名
我們已編寫的代碼可以編譯為包含類 HelloMessage 的類庫和包含類 HelloApp 的應用程序此編譯步驟的細節可能因使用的編譯器或工具而異使用 Visual Studio NET 中提供的命令行編譯器時用如下所列的命令
csc /target:library HelloLibrarycs
csc /reference:HelloLibrarydll HelloAppcs
它產生一個名為 HelloLibrarydll 的類庫和一個名為 HelloAppexe 的應用程序
From:http://tw.wingwit.com/Article/program/net/201311/12679.html