.Net 7 託管Main入口的四種寫法(茴香豆?)

江湖評談發表於2023-01-27

前言:
按照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#程式碼的運作。



結尾
作者:江湖評談
image

相關文章