前言:

按照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#代码的运作。

结尾

作者:江湖评谈

最新文章

  1. SVD的几何意义,以及在去噪,推荐系统中的应用
  2. ios-系统警告框 跳转到设置里面
  3. Centos配置网卡
  4. (POJ2635)The Embarrassed Cryptographer(大数取模)
  5. 软件设计之UML—UML中的六大关系
  6. Servlet与jsp间的传值问题
  7. mysql的内连接,外连接(左外连接,右外连接)巩固
  8. Perl文件测试操作和stat函数
  9. H5海报制作实践
  10. MySQL删除命令_DELETE
  11. 【Python64-tkinter_label组件】
  12. ReactNative组件之scrollView实现轮播
  13. Android 组件系列-----Activity初步
  14. Docker容器使用jenkins部署web项目--总结(二)
  15. B: Break Prime
  16. 【机器学习】多项式回归sklearn实现
  17. Kali信息收集工具-dimtry
  18. mysql中设置小数
  19. 查找一个String中存储的多个数据
  20. Pycharm选中代码无法Backspace直接删除

热门文章

  1. markdown第一天学习
  2. 详解AQS中的condition源码原理
  3. Android ViewHolder
  4. 基于python的数学建模---pulp库
  5. C#微信公众号关注二维码生成、密文方式
  6. [Android开发学iOS系列] TableView展现一个list
  7. 5种典型 API 攻击及预防建议
  8. laravel框架 forelse和foreach
  9. Qt5 如何在designer中给工具栏(QToolBar)添加分割线
  10. sublime text设置build system automatic提示no build system