.NET 10 是微软开发的.NET框架的最新版本,它旨在提供更好的性能、更高的安全性和更丰富的功能。以下是.NET 10的一些主要特点:1. **性能提升**:.NET 10 在性能方面进行了大量优化,包括JIT编译器、垃圾回收器和其他关键组件的改进。2

摘要:上篇文章给大家分享了 .NET 10 & C# 14 New Features 新增功能介绍-扩展成员Extension Members 今天又看了一遍Top Level Program顶级程序语句。这个很早就支持
上篇文章给大家分享了 .NET 10 & C# 14 New Features 新增功能介绍-扩展成员Extension Members 今天又看了一遍Top Level Program顶级程序/语句。这个很早就支持了,给大家做个分享。 顶级语句允许直接在文件的根目录中编写可执行代码,而无需在类或方法中包装代码。 无需使用Program类和Main方法即可创建程序。 在这种情况下,编译器将使用入口点方法为应用程序生成Program类。 生成方法的名称不是Main,而是你的代码无法直接引用的实现详细信息。 下面是一个Program.cs文件,该文件是完整的 C# 程序: Console.WriteLine("Hello World!"); 借助顶级语句,可以编写简单的程序应用。 方便初次接触 C# 的程序员能够更轻松地开始学习和编写代码。 以下各节介绍了可对顶级语句执行和不能执行的操作的规则。 1. 只有一个包含顶级语句的文件 一个应用程序只能有一个入口点。 一个项目只能有一个包含顶级语句的文件。 在项目中的多个文件中放置顶级语句会导致以下编译器错误: CS8802:只有一个编译单元可具有顶级语句。 项目可以有任意数量的没有顶级语句的源代码文件。 2. 没有其他入口 可以显式编写方法Main,但它不能用作入口点。 编译器将发出以下警告: CS7022:程序的入口点是全局代码;忽略“Main()”入口点。 在具有顶级语句的项目中,不能使用-main编译器选项来选择入口点,即使该项目具有一个或多个Main方法。 3. using引用 对于包含顶级语句的单个文件,using指令必须首先出现在该文件中,如以下示例所示: using System.Text; StringBuilder builder = new(); builder.AppendLine("The following arguments are passed:"); foreach (var arg in args) { builder.AppendLine($"Argument={arg}"); } Console.WriteLine(builder.ToString()); return 0; 同时,顶级语句隐式位于全局命名空间Global using中。 4. 命名空间和类型定义 具有顶级语句的文件还可以包含命名空间和类型定义,但它们必须位于顶级语句之后。 例如: MyClass.TestMethod(); MyNamespace.MyClass.MyMethod(); public class MyClass { public static void TestMethod() { Console.WriteLine("Hello World!"); } } namespace MyNamespace { class MyClass { public static void MyMethod() { Console.WriteLine("Hello World from MyNamespace.MyClass.MyMethod!"); } } } 5. args入参 顶级语句可以引用args变量来访问输入的任何命令行参数。args变量永远不会为 null,但如果未提供任何命令行参数,则其Length将为零。 例如 if (args.Length > 0) { foreach (var arg in args) { Console.WriteLine($"Argument={arg}"); } } else { Console.WriteLine("No arguments"); } 6. await异步调用 调用await来执行异步方法。 例如: Console.Write("Hello "); await Task.Delay(5000); Console.WriteLine("World!"); 7. 隐式入口方法 编译器会生成一个方法,作为具有顶级语句的项目的程序入口点。 方法的签名取决于顶级语句是包含await关键字还是return语句。 下表显示了方法签名的外观,使用表中的方法名称Main来方便起见。 以上,总结分享给大家。 周国庆 20220226