.NET 10 & C# 14 New Features 新增功能介绍-扩展成员Extension Members

项目可以有任意数量的没有顶级语句的源代码文件。

  1. 没有其他入口

可以显式编写方法 Main ,但它不能用作入口点。 编译器将发出以下警告:

CS7022:程序的入口点是全局代码;忽略"Main()"入口点。

在具有顶级语句的项目中,不能使用 -main 编译器选项来选择入口点,即使该项目具有一个或多个 Main 方法。

  1. 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中。

  1. 命名空间和类型定义

具有顶级语句的文件还可以包含命名空间和类型定义,但它们必须位于顶级语句之后。 例如:

复制代码
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!");
        }
    }
}
  1. args入参

顶级语句可以引用 args 变量来访问输入的任何命令行参数。 args 变量永远不会为 null,但如果未提供任何命令行参数,则其 Length 将为零。 例如

复制代码
if (args.Length > 0)
{
    foreach (var arg in args)
    {
        Console.WriteLine($"Argument={arg}");
    }
}
else
{
    Console.WriteLine("No arguments");
}
  1. await异步调用

调用 await 来执行异步方法。 例如:

复制代码
Console.Write("Hello ");
await Task.Delay(5000);
Console.WriteLine("World!");
  1. 隐式入口方法

编译器会生成一个方法,作为具有顶级语句的项目的程序入口点。 方法的签名取决于顶级语句是包含 await 关键字还是 return 语句。

下表显示了方法签名的外观,使用表中的方法名称 Main 来方便起见。

相关推荐
笨蛋不要掉眼泪10 分钟前
Java虚拟机:常用参数
java·开发语言·python
happy_0x3f23 分钟前
前端应用的离线暂停更新策略
开发语言·前端·php
shylyly_1 小时前
C++中的类型转换
开发语言·c++·匿名对象·隐式类型转换·拷贝优化
吴可可1231 小时前
C#CAD点击计数器实现
c#
北冥you鱼1 小时前
Go 语言新手扫盲:指针 * 和 & 使用场景详解
开发语言·后端·golang
cui_ruicheng2 小时前
Python数据分析(一):数据分析概述与环境搭建
开发语言·python·数据分析
心平气和量大福大2 小时前
C#-WPF-UserControl-生命周期(加载 退出)
开发语言·c#·wpf
sunywz2 小时前
【c#】 Web Deploy一键发布,IIS部署全流程
开发语言·前端·c#
Brilliantwxx2 小时前
【Linux】 软件包管理器(yum)+ Vim使用
linux·运维·服务器·开发语言·编辑器·vim
雪的季节2 小时前
Python 线程同步与异步编程 全解析
java·开发语言