前言:
按照CLR的規則,C#託管Main入口其實有四種寫法。
寫法
第一種:最常見的,也是VS預設的,返回值void,帶一個引數
static void Main(string[] args)
{
Console.Write("Tian xia feng yun chu wo bei");
Console.ReadLine();
}
第二種:返回值void,不帶引數
static void Main()
{
Console.Write("Tian xia feng yun chu wo bei");
Console.ReadLine();
}
第三種:返回值int,帶一個引數
static int Main(string []args)
{
Console.Write("Tian xia feng yun chu wo bei");
Console.ReadLine();
return 0;
}
第四種:返回值Int,不帶引數
static int Main()
{
Console.Write("Tian xia feng yun chu wo bei");
Console.ReadLine();
return 0;
}
原理
這四種型別,根據CLR的規則演變
enum CorEntryPointType
{
EntryManagedMain, // void main(String[])
EntryCrtMain // unsigned main(void)
};
看到,CLR定義託管Main入口的返回值兩種型別:void和unsigned(int)。
引數也有兩種型別:void和String[]。
把這些規則兩兩組合,就成了託管Main入口的所有種類。
同時也要注意的是,它這個Main的引數不能超過一個,要麼0個,要麼1個。多了的話,它直接報錯了。這個規則也是CLR定義的。
if (nParamCount != 1)
ThrowMainMethodException(pFD, IDS_EE_TO_MANY_ARGUMENTS_IN_MAIN);
透過CLR的這些規則,控制C#程式碼的運作。
結尾
作者:江湖評談