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