擁有進入點(entry point)的程序集稱應用程序(application)。當運行一應用程序時,將創(chuàng)建一新應用程序域(application domain)。同一個應用程序可在同一臺機器(machine)上同時運行多個實例,并且每個實例都有自己的應用程序域。
應用程序域作為應用程序狀態(tài)(application state)之容器(container),使應用程序相互隔離(isolation)。應用程序域是定義于應用及所用類庫的類型之容器與邊界。加載入不同的應用程序域的同一類型是相互涇渭分明的,而其實例化的對象也不會在應用程序域之間直接共享。比方說,對于這些類型的靜態(tài)變量,每個應用程序域都自有一份其副本,同時這些類型的靜態(tài)構造函數(shù)在應用程序域中至多運行一次。實現(xiàn)可以自由為應用程序域的創(chuàng)建和銷毀提供指定實現(xiàn)(implementation-specific)策略或機制。
應用程序啟動(Application startup)時,執(zhí)行環(huán)境會調(diào)用一個特指的方法作為應用程序的進入點(entry point)。入口點方法一貫稱為 Main,且可為下列簽名中的一種:
static void Main() {...}static void Main(string[] args) {...}static int Main() {...}static int Main(string[] args) {...}如上所示,進入點可以選擇 int 為其返回值。這個返回值通常被用在應用程序終止(application termination,第三章第二節(jié))時。
進入點有個可選形參。這個參數(shù)可以用任何名稱,但它的類型必須是 string[]。如果出現(xiàn)形參,那么當應用程序啟動時,執(zhí)行環(huán)境將通過命令行參數(shù)(command-line arguments)的方式創(chuàng)建并傳遞指定的 string[]實參。實參 string[]永不為空(null),但它可能長度為零(如果命令行沒有指定實參的話)。
由于 C# 支持方法重構(overload),類或結構可以包含一個方法的多個定義,前提是每個重載版本都有不同的方法簽名。然而,在一個程序內(nèi),類或結構內(nèi)不能同時存在多個叫做 Main 的方法,因為 Main 被限定為只能作為應用程序的入口點。如果提供超過一個參數(shù)或者唯一參數(shù)類型不是 string[],則允許重載多個 Main 版本。
應用程序可由多個類與結構組成,也許會有多個 Main 方法在這些類或結構內(nèi),由于 Main 的定義限定它只能是應用程序入口點,所以在這種情況下,外部機制(諸如命令行編譯器選項)必須從中選擇其一作為應用程序的進入點。
在 C# 中每一個方法都必須定義為類或結構的成員,一般情況下方法的聲明可訪問性(declared accessibility,第三章第 5.1 節(jié))是由訪問控制修飾符(access modifiers,第十章第 3.5 節(jié))所決定的;同樣,類型的聲明聲明可訪問性也是由其訪問控制修飾符所決定的。為了調(diào)用所給定類型的給定方法,類型與成員都必須可被訪問(accessible),然應用程序進入點是特例。不管應用程序進入點的聲明可訪問性及其閉包類型的聲明可訪問性,執(zhí)行環(huán)境總能訪問到它們。
應用程序進入點方法(entry point method)不能放入泛型類聲明內(nèi)。
在其它各方面,進入點方法與非進入點方法的行為類似。