简介
传统上,一个典型的 C# 应用的入口文件是这样的:
using System;
namespace HelloWorld
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("你好,世界!");
}
}
}
模板代码比较多,看上去很繁琐。C# 9.0 带来了顶级语句,以上代码可以简化为:
using System;
Console.WriteLine("你好,世界!");
感觉简洁舒服多了!当然,这也只是 C# 编译器的“奇淫技巧”,编译器实际上是自动帮你生成了 Main 函数。因此,以下几个使用限制应该很好理解。
- 和 Main 函数一样,一个应用只能有一个文件有顶级语句
- 顶级语句和 Main 函数不能混用,两者同样只能选用一种,如果两者混用, Main 函数的入口功能被忽略,同时发出编译警告。
- 如果包含 using 语句,必须放在最前面。
命名空间和类型定义
包含顶级语句的文件也可以包含命名空间和自定义类型,但必须在顶级语句之后。
// See https://aka.ms/new-console-template for more information
// using 语句必须最先出现
using Test;
var student = new Student("小明", 12);
Console.WriteLine(student);
var person = new Person("张三");
Console.WriteLine(person);
// 类型定义必须在顶级语句之后
public record Student(string Name, int Age);
namespace Test
{
class Person
{
public Person(string name)
{
Name = name;
}
public string Name { get; private set; } = string.Empty;
public void ChangeName(string name)
{
Name = name;
}
}
}
应用参数
顶级语句可以通过 args 变量获取应用参数。
if (args.Length > 0)
{
Console.WriteLine("应用获得了以下参数:");
foreach (var arg in args)
{
Console.WriteLine(arg);
}
}
else
{
Console.WriteLine("使用者没有提供参数");
}
异步
比较神奇的是,顶级语句直接支持 await 。
Console.Write("你好 ");
await Task.Delay(5000);
Console.WriteLine("世界!");
结论
虽然只是编译器提供的一个小小语法糖,但确实是一个不错的改进。特别是对初学者非常友好,写教程时也能节省不少空间。另外在写Azure Functions 或者 GitHub Actions这样的场景也很有用。

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 sumchina520@foxmail.com 举报,一经查实,本站将立刻删除。
如若转载,请注明出处:https://www.vsaren.com/11813.html
如若转载,请注明出处:https://www.vsaren.com/11813.html