前言:
来看看不同托管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活动
结尾:
作者:江湖评谈
【.Net 7的带参和不带参的Main入口】
推荐阅读
- 如何设计一个 70w 在线人数的弹幕系统 ?
- goland中npm无法使用的问题及解决方法
- TCP通信协议
- 基于dispatcher模式的事件与数据分发处理器的go语言实现
- 微软下个十年的想象力,藏在ChatGPT里
- 做自媒体6年粉丝上百万,分享我常用的7个效率工具
- 恶意程序 IcedID 来袭,通过 DCSync 攻击窃取AD域控的凭据
- Fortinet VPN已修复的缓冲区溢出零日漏洞,可执行任意代码
- 超市预付卡是什么意思_信用卡与预付卡的区别?
- 一生中最重要的事,代表作 金黄的大斗笠ppt?《金黄的大斗笠》的作者高风的详细介绍?