C# 控制台应用模板可生成顶级语句

C# 控制台应用模板可生成顶级语句

  • 项目
  • 2024/01/08
  • 10 个参与者

反馈

本文内容

  1. 使用新的程序样式
  2. 隐式 using 指令
  3. 全局 using 指令
  4. 使用旧程序样式

从 .NET 6 开始,新 C# 控制台应用的项目模板在 Program.cs 文件中生成以下代码:

C#复制

// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");

新的输出使用最新的 C# 功能,这些功能简化了需要为程序编写的代码。 对于 .NET 5 及更早版本,控制台应用模板生成以下代码:

C#复制

using System;namespace MyApp // Note: actual namespace depends on the project name.
{internal class Program{static void Main(string[] args){Console.WriteLine("Hello World!");}}
}

这两种形式代表同一个程序。 两者都适用于 C# 10.0。 使用较新版本时,只需编写 Main 方法的主体。 编译器会生成一个具有入口点方法的 Program 类,并将你的所有顶级语句置于该方法中。 生成的方法的名称不是 Main,它是你的代码无法直接引用的实现细节。 不需要包含其他程序元素,编译器会为你生成这些元素。 你可以在 C# 指南的基础部分中,在关于顶级语句的文章中详细了解使用顶级语句时编译器生成的代码。

对于尚未更新为使用 .NET 6+ 模板的教程,可以使用以下两个选项:

  • 使用新的程序样式,添加功能时添加新的顶级语句。
  • 使用 Program 类和 Main 方法将新程序样式转换为旧样式。

如果要使用旧模板,请参阅本文后面的使用旧程序样式。

使用新的程序样式

使新程序更简单的功能是顶级语句、全局 using 指令和隐式 using 指令 。

术语顶级语句是指编译器会为主程序生成类和方法元素。 编译器生成的类和入口点方法在全局命名空间中声明。 你可以查看新应用程序的代码,并假设它包含早期模板所生成的 Main 方法内的语句,但位于全局命名空间中。

你可以向程序添加更多语句,就像用传统方式将更多语句添加到 Main 方法一样。 可以访问 args(命令行参数)、使用 await 并设置退出代码。 甚至可以添加函数。 它们被创建为嵌套在生成的入口点方法中的本地函数。 本地函数不能包括任何访问修饰符(例如 public 或 protected)。

顶级语句和隐式 using 指令都简化了构成应用程序的代码。 若要按照现有教程操作,请将所有新语句添加到模板生成的 Program.cs 文件中。 假设在本教程的说明中,你编写的语句位于 Main 方法中的左大括号和右大括号之间。

如果你更喜欢使用较旧的格式,则可以复制本文第二个示例中的代码,并像以前一样继续学习本教程。

有关顶级语句的详细信息,请参阅有关顶级语句的教程。

隐式 using 指令

术语“隐式 using 指令”是指编译器会根据项目类型自动添加一组 using 指令。 对于控制台应用程序,以下指令隐式包含在应用程序中:

  • using System;
  • using System.IO;
  • using System.Collections.Generic;
  • using System.Linq;
  • using System.Net.Http;
  • using System.Threading;
  • using System.Threading.Tasks;

其他应用程序类型包括更多对这些应用程序类型通用的命名空间。

如果需要未隐式包含的 using 指令,可以将这些指令添加到包含顶级语句的 .cs 文件或其他 .cs 文件中。 对于应用程序的所有 .cs 文件中所需的 using 指令,请使用全局 using 指令。

禁用隐式 using 指令

如果想删除此行为并手动控制项目中的所有命名空间,请将 <ImplicitUsings>disable</ImplicitUsings> 添加到项目文件的 <PropertyGroup> 元素中,如以下示例所示:

XML复制

<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup>...<ImplicitUsings>disable</ImplicitUsings></PropertyGroup></Project>

全局 using 指令

全局 using 指令导入整个应用程序的命名空间,而不是单个文件。 可以通过向项目文件添加 <Using> 项或将 global using 指令添加到代码文件来添加这些全局指令。

还可以在项目文件中添加一个具有 Remove 属性的 <Using> 项,以删除特定的隐式 using 指令。 例如,如果通过 <ImplicitUsings>enable</ImplicitUsings> 启用隐式 using 指令功能,则添加以下 <Using> 项会从隐式导入的命名空间中删除 System.Net.Http 命名空间:

XML复制

<ItemGroup><Using Remove="System.Net.Http" />
</ItemGroup>

使用旧程序样式

从 .NET SDK 6.0.300 开始,console 模板具有选项 --use-program-main。 请使用它来创建不使用顶级语句且具有 Main 方法的控制台项目。

.NET CLI复制

dotnet new console --use-program-main

生成的 Program.cs 如下所示:

C#复制

namespace MyProject;
class Program
{static void Main(string[] args){Console.WriteLine("Hello, World!");}
}

在 Visual Studio 中使用旧程序样式

  1. 创建新项目时,设置步骤将导航到“其他信息”设置页。 在此页上,选择“不要使用顶级语句”复选框。

    Visual Studio do not use top-level statements check box

  2. 创建项目后,Program.cs 内容如下所示:

    C#复制

    namespace MyProject;
    class Program
    {static void Main(string[] args){Console.WriteLine("Hello, World!");}
    }

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

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

相关文章

C++ prime 第五版 第14章 重载运算与类型转换

一、基本概念 重载的运算符是具有特殊名字的函数&#xff1a;它们的名字由关键字operator和其后要定义的运算符号共同组成。和其他函数一样&#xff0c;重载的运算符也包含返回类型、参数列表以及函数体。 我们不能为内置类型的运算对象重定义运算符。对于一个运算符函数来说&…

某方protobuf闲谈

问题 当我们去看某方的时候,搜索了关键词svm,然后通过抓包查看,请求的Request Payload是一串看不懂的乱码,并且返回的数据也大部分是乱码 观察请求的Content-Type是application/grpc-web+proto,没错数据的传输是protobuf的形式了 protobuf的相关概念和原理,网上有很多教…

vulhub——Aria2、bash、catic

文章目录 一、Aria2 任意文件写入漏洞二、CVE-2014-6271&#xff08;Bash Shell 漏洞&#xff09;三、CVE-2022-46169&#xff08;Cacti 前台命令注入漏洞&#xff09; 一、Aria2 任意文件写入漏洞 Aria2是一个命令行下轻量级、多协议、多来源的下载工具&#xff08;支持 HTTP…

conda create,conda:未找到命令,ubantu添加环境变量,make工具是什么,docker工具什么,

目录 conda create -n flock_client python==3.11 conda:未找到命令,ubantu添加环境变量 添加conda到系统路径

docker-compose 搭建 单机版ELK

docker-compose 搭建 单机版ELK 前言 本次部署将使用ElasticSearch官方的镜像和Docker-Compose来创建单节点的ELK&#xff0c;用于学习ELK操作。在k8s集群内&#xff0c;如果每天的日志量超过20G以上&#xff0c;建议部署在k8s集群外部&#xff0c;以支持分布式集群的架构。在…

Flutter 中的 RepaintBoundary 小部件:全面指南

Flutter 中的 RepaintBoundary 小部件&#xff1a;全面指南 在Flutter的高性能渲染体系中&#xff0c;RepaintBoundary是一个重要的优化工具。它允许开发者将复杂的组件分割成独立的部分&#xff0c;以减少不必要的重绘&#xff0c;从而提高应用的性能。本文将提供RepaintBoun…

11|数据库编程:包括数据库的基本概念,JDBC的使用,数据库连接池的实现,Hibernate和MyBatis的应用等。

数据库基本概念 想象你有一个装满宝藏的箱子&#xff0c;里面放着各种宝贝&#xff0c;但这些宝贝都按照一定规则摆放。数据库就像是这样一个箱子&#xff0c;但它存放的是信息&#xff0c;比如姓名、年龄、电子邮件等。它帮我们有条理地管理数据&#xff0c;让我们可以方便地…

【WEB前端2024】开源智体世界:乔布斯3D纪念馆-第26节-内嵌blender展厅

【WEB前端2024】开源智体世界&#xff1a;乔布斯3D纪念馆-第26节-内嵌blender展厅 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界…

python操作rabbitmq的consumer,并强制关闭特定consumer的连接

引入 python获取指定队列的consumer python可以使用rabbitmq_management的api获取所有consumer的信息。【队列需要安装rabbitmq_management&#xff0c;在大部分情况下&#xff0c;我们安装队列的同时&#xff0c;都会安装管理界面&#xff0c;以方便一些简单的手动操作与简单…

网络编程的基础知识(适合新手)

网络编程 在Java中&#xff0c;网络编程是指使用Java语言进行网络通信的编程技术。这种技术使得位于不同地理位置的计算机能够通过网络进行通信&#xff0c;实现资源共享和信息传递。 一、定义 Java网络编程是Java语言在网络通信方面的应用&#xff0c;它利用Java提供的网络…

位带操作 Bit-band

位带操作&#xff08;Bit-banding&#xff09;的特性是ARM Cortex-M微控制器中一个非常有用的功能&#xff0c;其目的是提供一种简便的方法来访问和操作存储器中单个位的状态。位带操作能够使程序员能够以原子操作&#xff08;即不可中断的操作&#xff09;的方式读取和写入单个…

Flutter 中的 DateRangePickerDialog 小部件:全面指南

Flutter 中的 DateRangePickerDialog 小部件&#xff1a;全面指南 在 Flutter 应用开发中&#xff0c;日期和时间的选择是一项常见的用户交互需求。DateRangePickerDialog 是一个方便的小部件&#xff0c;它提供了一个对话框界面&#xff0c;允许用户选择日期范围。这个小部件…

前端-全局样式

当我们有一个样式需要全局引用的时候&#xff0c;我们首先新建一个global.scss的样式文件&#xff0c;这里我举例一下 html, body {margin: 0;height: 100%;width: 100%;#app {height: 100%;} }然后在我们的main.ts 文件中 声明&#xff0c;这样的话我们整个项目都能用到这个样…

重开之数据结构(二刷)

引言: 由于前段时间学习效率不高,导致后面复习前面数据结构没有一个大纲,因此打算重新来学习以下数据结构,期望再次把数据结构学透,并有深刻的印象.并且记录每一次的学习记录 以便于后续复习 二分查找 需求:在有序数组arr内,查找target值 如果找到返回索引位置如果找不到返回…

c++(一)

c&#xff08;一&#xff09; C与C有什么区别命名空间使用 输入输出流引用指针和引用的区别定义拓展 函数重载例子测试函数重载原理 参数默认值什么是参数默认值注意 在c中如何引入c的库动态内存分配new、delete与malloc、free的区别&#xff1f; C与C有什么区别 <1>都是…

Introduction of Internet 计算机网络概述

计算机网络的概念 计算机网络的定义&#xff1a; 多台独立的计算机通过通信线路实现资源共享的计算机系统 计算机网络的组成 资源子网&#xff1a;提供共享的软件资源和硬件资源 通信子网&#xff1a;提供信息交换的网络结点和通信线路 计算机网络类型 按照拓扑排序 星型…

【STM32】计算定时器的溢出

TIM2、3、4、5、12、13、14在APB1上&#xff0c;最大计数频率84M。 TIM1、8、9、10、11在APB2上&#xff0c;最大计数频率168M。 time(arr1)/(prescale1)/Tclk 算出来的是秒 下图使用TIM14 84MHz 那么time33600*25000/8400000010S&#xff0c;10S进入一次中断 中断方式开…

基于STM32+NBIOT(BC26)设计的物联网观赏鱼缸

文章目录 一、前言1.1 项目介绍【1】开发背景【2】项目实现的功能【3】项目模块组成 1.2 设计思路 二、(硬件控制端)硬件选型2.1 STM32开发板2.2 PCB板2.3 USB下载线2.4 NBIOT模块2.5 杜邦线&#xff08;2排&#xff09;2.6 稳压模块2.7 电源插头2.8 水温检测传感器2.9 水质检测…

三星HBM3/3E未通过英伟达测试标准

据报道&#xff0c;三星的最新HBM3与HBM3E内存堆栈在满足英伟达的热能和功耗要求方面遇到了困难。这些内存产品因过热及高功耗问题未能通过英伟达的测试&#xff0c;这对三星来说是一个重大挫折&#xff0c;尤其是考虑到英伟达在全球AI应用处理器市场占据主导地位。同时&#x…

001 CentOS 7.9 安装及配置jdk-8u411-linux-x64.tar.gz

文章目录 1. 下载JDK安装包2. 创建安装目录3. 上传并解压JDK安装包4. 配置环境变量5. 验证安装 1. 下载JDK安装包 首先&#xff0c;需要从Oracle官方网站或其他可信赖的来源下载jdk-8u411-linux-x64.tar.gz安装包。 2. 创建安装目录 在终端中执行以下命令&#xff0c;创建一…