前言:
來看看不同托管Main情況。
概述
一般的VS生成的默認Main如下:
static void Main(string[] args)
Console.Write("Tian xia feng yun chu wo bei");
Console.ReadLine;
可以看到Main函數帶了參數string args。
其實它這個參數是可以去掉的,寫成如下也可以
static void Main
Console.Write("Tian xia feng yun chu wo bei");
Console.ReadLine;
為什么不要參數也是可以的呢?本質是在CLR為托管入口提供了兩套類型
enum CorEntryPointType
EntryManagedMain // void main(String[])
EntryCrtMain // unsigned main(void)
EntryManagedMain是默認的,EntryCrtMain則是隱藏的一種托管入口類型。CLR會判斷當前的托管Main是否包含了參數,如果有且參數個數為1,則是默認的那種,如果無,則是第二種。所以導致了Main入口函數的參數可有可無。
代碼如下:
if (nParamCount == 0)
*pType = EntryCrtMain;
else {
*pType = EntryManagedMain;
if (nParamCount != 1)
ThrowMainMethodException(pFD, IDS_EE_TO_MANY_ARGUMENTS_IN_MAIN);
如果參數個數不等于1的話,拋出ThrowMainMethodException異常。可以在VS里面搞兩個參數試驗下。
結果報錯如下
嚴重性代碼說明項目文件行禁止顯示狀態
錯誤CS5001程序不包含適合于入口點的靜態 "Main" 方法CSC1活動
結尾:
作者:江湖評談