从 .NET 6 开始,新 C# 控制台应用的项目模板会在 Program.cs 文件中生成以下代码:
// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");
新输出使用最新的 C# 功能来简化为程序编写的代码。 对于 .NET 5 和更低版本,控制台应用模板将生成以下代码:
using System;
namespace MyApp
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}
在前面的代码中,实际命名空间取决于项目名称。
这两种形式表示相同的程序。 两者在 C# 中均有效。 使用较新版本时,只需编写 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> 元素中的项目文件,如以下示例所示:
<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 命名空间:
<ItemGroup>
<Using Remove="System.Net.Http" />
</ItemGroup>
使用旧的程序样式
从 .NET SDK 6.0.300 开始,console 模板具有 --use-program-main 选项。 使用它创建不使用顶级语句且具有 Main 方法的控制台项目。
dotnet new console --use-program-main
生成的 Program.cs 如下所示:
namespace MyProject;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
}
}
在 Visual Studio 中使用旧程序样式
当您创建一个新项目时,设置步骤会导航到 “其他信息” 设置页面。 在此页上,选择“不要使用顶级语句”复选框。
创建项目后,
Program.cs内容如下所示:namespace MyProject; class Program { static void Main(string[] args) { Console.WriteLine("Hello, World!"); } }
注释
Visual Studio 会在下次基于同一模板创建项目时保留选项的值,因此在下次选中“不使用顶级语句”复选框时,默认情况下,在创建控制台应用项目时,将选中该值。
Program.cs 文件的内容可能有所不同,以匹配全局 Visual Studio 文本编辑器设置或 EditorConfig 文件中定义的代码样式。
有关详细信息,请参阅 使用 EditorConfig 创建可移植的自定义编辑器设置 和 选项、文本编辑器、C#、高级。