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