热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#9.0新特性详解系列之四:顶级程序语句(TopLevelPrograms)

原标题:C#9.0新特性详解系列之四:顶级程序语句(Top-LevelPrograms)1背景与动机通常,如果只想用C#在控制台上打

原标题:C#9.0新特性详解系列之四:顶级程序语句(Top-Level Programs)

1 背景与动机

通常,如果只想用C#在控制台上打印一行“Hello World!”,这可不是Co文章来源站点https://www.yii666.com/nsole.WriteLine("Hello World!");一条语句就可以搞定的,还涉及到其他必要基础代码(如定义类和入口函数Main),例如下面:

using System;
class Program
{
static void Ma文章来源地址28132.htmlin()
{
Console.WriteLine("Hello World!");
}
}

就打印一句“Hello World!”,就这么多代码。这个不仅对于初学者来说麻烦,而且使得代码凌乱,并且增加了缩进层级。为了解决这些问题,就提出了顶级代码语句这个新特性。

2 顶级语句


2.1 介绍

在C#9.0中,将Class的定义和主函数Main的声明省略掉,只写出你的核心业www.yii666.com务代码,就成了顶级语句。上面这段代码,我们可以用顶级语句写为:

using System;
Console.WriteLine("Hello World!");

这样,代码简洁清晰了很多,易于初学者理解。是不是有点写Python的感觉?当然,任何语句都是允许的。如果你想返回值,你可以那样做;你想用await,也可以那样做;如果你想访问命令行参数,args也是可用的;你想使用本地函数,也是可以的。

虽然可以使用任何代文章来源地址28132.html码,但是有一些规则要求必须遵守:


  • 顶级语句必须放在using语句代码后面


  • 顶级语句必须用在任何类型或者命名空间声明的前面


  • 顶级语句只能写在一个源代码文件里,像如今只能写一个main方法一样。


  • 顶级语句中定义的本地函数和变量,在顶级代码段外部的任何地方调用他们都会产生错误。


下面这段代码就是一个比较好的示例:

using static System.Console;
using System.Threading.Tasks;
WriteLine("Hello,");
Print(args[0]);
await Task.Delay(1000);
return 0;
void Print(string arg)
{
WriteLine(arg);
}

2.2 原理

我们知道,C#作为面向对象的编程语言,一切类型都是面向对象的,要有类型和成员定义。顶级语句表面看着好像违反了这一规则,实际上没有。这是因为,顶级语句最终还是在编译的时候,被作为全局命空间中Program类的Main方法体中一段代码一起自动生成。如下所示:

static class Program
{
static async Task Main(string[] args)
{
// 顶级语句
}
}

需要注意的是,这里的类名Program和方法名Main只是用来举例,其实在编译器生成的不是这个名字。我们可以通过查看IL代码确认这一点:
码客风云

来源于:C#9.0新特性详解系列之四:顶级程序语句(Top-Level Programs)


推荐阅读
author-avatar
胖妞-Debbie_982
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有