【.net10】顶级程序语句

在旧版(.net5及之前的)的.net 项目中,新建的项目代码可能是这样

cs 复制代码
using System;
namespace HelloCS
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World!");
        }
    }
}

必须包含:引用命名空间using、自定义命名空间、Program类、程序入口static void Main方法,所有执行代码都要包裹在 Main 内部。

但是在.net6及以后得版本中开启顶级语句后

入口文件代码可以只剩这一行:

cs 复制代码
Console.WriteLine("Hello, World!");

省去所有模板壳子,直接写执行代码。

新版本的.net编译器会自动补全空名称的命名空间和main函数,并将其包裹。

所以顶级语句是定义在一个没有名称的空命名空间中,而不是定义在一个采用项目名称的名称空间中。

打印名称空间:

复制代码
string name = typeof(Program).Namespace ?? "空空如也";
Console.WriteLine($"namespace: { name }");

结果显示 namespace: 空空如也

注意:

1.一个项目只能有一个这样的文件。

2.任何using语句仍然必须放在文件顶部。

3.其它任何类或其他类型的声明,必须放在文件底部。

为什么在刚才的顶级语句中,没有发现using呢?

cs 复制代码
using System;

因为在新版(c#10 和 .net 6)中引入了一个叫做全局名称空间导入(global using)的特性自动完成了这些,在项目文件夹中依次展开obj->debug->.net10文件夹,找到xxx.GlobalUsings.g.cs(xxx是项目名称)文件,在编辑器中打开后,代码如下:

cs 复制代码
// <auto-generated/>
global using System;
global using System.Collections.Generic;
global using System.IO;
global using System.Linq;
global using System.Net.Http;
global using System.Threading;
global using System.Threading.Tasks;
global using Xunit;

使用global using组合意味着只需要在一个.cs文件中导入。所以也可以在Program.cs中引入其它类,当然也能在其它.cs文件中使用global using导入。

相关推荐
mldong15 小时前
引擎从不发一条消息:jeeflow 的两类扩展点与消息模块的分工
java·架构
君顾115 小时前
智慧零售实战指南:从技术架构到落地方案全解析
java·开发语言·零售
南棱笑笑生16 小时前
20260904实测给飞凌OK3576-C开发板刷入Rockchip原厂的IMG固件【使用飞凌的DTS】切换串口波特率为1.5Mbps
c语言·开发语言·rockchip
zhanghe68716 小时前
es的密码带有特殊字符,导出
java
平头哥技术团队16 小时前
Day 10 | 工欲善其事:VS Code 配置与项目归档
android·开发语言·前端·javascript·html·交互
pnoker16 小时前
IoT DC3 概念解读:把设备抽象成一套语义模板——位号、指令、事件与面向智能体的设备建模
java·人工智能·物联网·iot·dc3
乌萨奇也要立志学C++16 小时前
【洛谷】kmp算法
开发语言·算法
my_realmy16 小时前
Java SE 基础学习笔记(一):面向对象、继承多态、抽象接口与异常(JDK 8)
java·多线程·并发··生产者消费者模式
传奇开心果编程16 小时前
【Rust入门知识点学与练】第4课:条件判断 if / else
开发语言·学习·rust
m0_3807438717 小时前
给 Claude API 调用补上超时重试和错误分类
开发语言·人工智能·php