聊聊 C# 中的顶级语句

image

前言

在 C# 9.0 版本之前,即使只编写一行输出 “Hello world” 的 C# 代码,也需要创建一个 C# 类,并且需要为这个 C# 类添加 Main 方法,才能在 Main 方法中编写代码。从 C# 9.0 开始,C# 增加了 “顶级语句” 语法,从此程序员可以直接在 C# 文件中编写入口代码,不再需要声明类和 Main 方法。

今天我们来聊聊这个顶级语句。

顶级语句的表现形式

  1. 创建一个 .NET Core Console 项目

  2. 清空 Program.cs 文件中的预定义模板生成的代码

  3. 直接在 Program.cs 文件里输入以下语句

    Console.WriteLine("Hello, World!");
    
  4. 运行项目,控制台直接打印出 “Hello, World!”

  5. 至此,就完成顶级语句的演示,无需声明命名空间和类,也无需定义 Main 方法,就完成以前 Main 方法所做的事情。

顶级语句的本质

顶级语句实例上是一个语法糖,旨在简化程序的结构,使得编写简单程序或脚本更加方便。

通过反编译上面的程序生成的程序集也可以证明这一点,实际上编译器在后台给这个 Program.cs 文件自动生成了一个名为 Program 类和 Main 方法。

顶级语句的优势

  1. 简化代码结构

    可以在顶级语句直接使用 await 语法调用异步方法和创建方法,比如以下代码:

    // 在顶级语句中,可以直接使用 await 语法调用异步方法,
    // 而且在顶级语句文件中也可以声明方法
    int i = 1, j = 2;
    int w = Add(i, j);
    await File.WriteAllTextAsync(@"D:\NETCoreSample\1.txt", $"Hellow {w}");int Add(int i, int j)
    {return i + j;
    }
    
  2. 快速开发快速测试

    有时候需要测试一个简单功能,比如验证一个正则表达式是否工作,程序 员就可以利用顶级语句快速编写和测试小段代码,而不需要创建完整的类和方法结构。

  3. 提高可读性

    顶级语句减少了样板代码,代码逻辑更加直观,代码更加简洁易读。

  4. 适用于脚本

    对于一些简单的脚本或命令行工具,顶级语句提供了更自然的编写方式

顶级语句的注意事项

因为顶级语句的本质只是一个语法糖,只是让编译器帮助程序员简化工作,因此在使用时要注意:

  1. 同一个项目中只能有一个文件具有顶级语句

  2. 顶级语句并不是用来替代原本的 Main 方法的,我们仍然可以用传统的 Main 方法编写入口代码

总结

C# 顶级语句的推出有效地简化了代码书写,特别适合于小型程序和脚本。

它的出现提高了代码的可读性和可维护性,使得程序员可以更专注于逻辑实现而非代码结构。

同时在使用时也要清楚它的本质,避开一些不必要的坑。

我是老杨,一个奋斗在一线的资深研发老鸟,让我们一起聊聊技术,聊聊程序人生,共同学习,共同进步

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/874862.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【FFmpeg】avcodec_receive_frame函数

目录 1.avcodec_receive_frame1.1 返回解码帧(ff_decode_receive_frame)1.2 返回重建帧(ff_encode_receive_frame) 2.小结 FFmpeg相关记录: 示例工程: 【FFmpeg】调用ffmpeg库实现264软编 【FFmpeg】调用f…

Vue3.0有什么更新——前端面试

1、监测机制改变 带来基于代理proxy的observer实现,提供全语言覆盖的反应性跟踪 消除 Vue2中 基于Object.defineProperty的实现 所存在的许多限制 2、只能监测属性,不能监测对象 检测属性的 添加和删除 检测 数组索引和长度的变更 支持 Map、Set …

nginx 如何做针对 ip 的限流

限流策略的背景: 限流可以在单体应用或分布式应用中实现。可以使用API网关如Zuul、Kong等实现限流,避免在业务应用中实现限流逻辑。 使用Nginx进行限流的优势: Nginx或openResty可以配置限流,无需修改应用代码。通过Nginx配置实现…

阿里云图片文件上传

一,官网地址 https://help.aliyun.com/document_detail/84781.html一切依据于官网 二,导入依赖 <dependencies><!-- 阿里云oss依赖 --><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId>&l…

redis原理之底层数据结构-跳表

1.什么是跳表 1.1 链表及其不足 链表是在程序设计中最常见的数据结构之一&#xff0c;它通过指针将多个链表节点连接起来&#xff0c;这样就可以将逻辑上同一类的数据存储到不连续的内存空间上。链表结构如下&#xff1a; 但是链表有一个问题&#xff0c;就是当链表需要查询一…

Windows系统网络流量监控与限制攻略

在现代互联网生活中&#xff0c;网络宽带流量管理变得越来越重要。特别是在家庭或小型办公环境中&#xff0c;有限的宽带流量需要被合理分配和有效利用。Windows系统提供了一些内置的工具和方法&#xff0c;可以帮助我们监控和限制电脑的网络宽带流量。 一、监控网络宽带流量 …

3.1 FreeRTOS详细移植步骤(自己的实操)

[TOC](3.1 FreeRTOS详细移植步骤(自己的实操)) 自己使用阿波罗F767的内存管理实验和定时器实验&#xff0c;进行复刻。 FreeRTOS源码版本是FreeRTOS 202212.01。官网和Github都有下载。 按照STM32F767FreeRTOS开发手册V1.1进行移植复刻。 注:这个开发手册不是开发指南。跟视频里…

关于Qt部署CMake导致“Failed to set working directory to”的问题

2024年7月23日补充&#xff1a;该目录过深的情况只在Win10上有发现&#xff0c;Win11则没有问题&#xff0c;且Win11可以在DevHome中设置LongPath。 --------------------------------------------------------------------------------------------------------------- 使用qt…

ADetailer模型+Stable Diffusion的inpainting功能是如何对遮罩区域进行修复生成的ADetailer

模型选则&#xff1a; face_yolov8n.pt 和 face_yolov8s.pt&#xff1a; 用途&#xff1a;用于人脸检测。特点&#xff1a;YOLOv8n 是轻量级版本&#xff0c;适合资源有限的设备&#xff1b;YOLOv8s 是标准版本&#xff0c;检测精度更高。 hand_yolov8n.pt&#xff1a; 用途&am…

Spark_Oracle_II_Spark高效处理Oracle时间数据:通过JDBC桥接大数据与数据库的分析之旅

接前文背景&#xff0c; 当需要从关系型数据库&#xff08;如Oracle&#xff09;中读取数据时&#xff0c;Spark提供了JDBC连接功能&#xff0c;允许我们轻松地将数据从Oracle等数据库导入到Spark DataFrame中。然而&#xff0c;在处理时间字段时&#xff0c;可能会遇到一些挑战…

分布式Apollo配置中心搭建实战

文章目录 环境要求第一步、软件下载第二步、创建数据库参考文档 最近新项目启动&#xff0c;采用Apollo作为分布式的配置中心&#xff0c;在本地搭建huanj 实现原理图如下所示。 环境要求 Java版本要求&#xff1a;JDK1.8 MySql版本要求&#xff1a;5.6.5 Apollo版本要求&…

第八讲:Sysmac Studio控制器设置

控制器设置 一、控制器设定-操作设置 1、启动模式(运行模式/编程模式) 控制器上电后,希望程序运行还是不运行。如果说希望程序运行,那么就选择运行模式。如果说希望上电后程序不运行就选择编程模式。 通常情况下选运行模式可能会比较多一些。 2、SD内存卡设置 当控制…

银河麒麟(arm64)环境下通过docker安装postgis3,并实现数据整体迁移

银河麒麟(arm64)环境下通过docker安装postgis3,并实现数据整体迁移 硬件配置:麒麟9006C 系统环境:银河麒麟桌面版v10 sp1 数据库:postgresql11+postgis3.0 具体的步骤参考https://blog.csdn.net/qq_34817440/article/details/103914574 -----主要操作-----------------…

QSqlTableModel操作数据库单表使用总结

本文记录使用QSqlTableModel等组件实现单表的数据库操作。 QSqlTableModel是一个模型类&#xff0c;它的实例可以作为一个数据表的模型。使用QSqlTableModel模型和QTableView组件构成模型/视图结构&#xff0c;就可以实现数据表的数据显示和编辑。 目录 所需的类及定义 表格控…

简化数据流:Apache SeaTunnel实现多表同步的高效指南

Apache SeaTunnel除了单表之间的数据同步之外&#xff0c;也支持单表同步到多表&#xff0c;多表同步到单表&#xff0c;以及多表同步到多表&#xff0c;下面简单举例说明如何实现这些功能。 单表 to 单表 一个source&#xff0c;一个sink。 从mysql同步到mysql&#xff0c;…

Pytorch TensorBoard的使用

from torch.utils.tensorboard import SummaryWriter writer SummaryWriter("logs")for i in range(100):writer.add_scalar("yx",i,i) writer.close() 第一个参数 y2x: 这是图表的标题或标签。它会显示在TensorBoard界面中,帮助你识别这条曲线。 第二个参…

(35)远程识别(又称无人机识别)(二)

文章目录 前言 4 ArduRemoteID 5 终端用户数据的设置和使用 6 测试 7 为OEMs添加远程ID到ArduPilot系统的视频教程 前言 在一些国家&#xff0c;远程 ID 正在成为一项法律要求。以下是与 ArduPilot 兼容的设备列表。这里(here)有一个关于远程 ID 的很好解释和常见问题列表…

【数据结构】排序算法——Lesson2

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f4a5;&#x1f4a5;个人主页&#xff1a;奋斗的小羊 &#x1f4a5;&#x1f4a5;所属专栏&#xff1a;C语言 &#x1f680;本系列文章为个人学习…

uni-app pinia搭建

1.新建store文件 新建index.js&#xff0c;代码&#xff1a; // import { // createPinia // } from pinia //const store createPinia() import * as Pinia from pinia const pinia Pinia.createPinia() export * from "./modules/user" export * from ".…

计算机网络 6.1Internet概念

第六章 Internet基础 第一节 Internet概念 一、认识Internet 1.定义&#xff1a;集现代计算机技术、通信技术于一体的全球性计算机互联网。 2.地位&#xff1a;当今世界上规模最大的计算机互联网。 3.使用协议&#xff1a;TCP/IP。 4.基本结构&#xff1a; ​ ①主干网…