通过


C# 程序的常规结构

小窍门

开发软件的新手? 首先开始 学习入门 教程。 在了解程序结构之前,他们将指导你编写第一个 C# 程序。

是否在其他语言中有经验? 你可能想要浏览 C# 特定语法的入门部分,然后返回此处。

从这些核心构建基块生成 C# 程序:命名空间组织类型、类型(类、结构、接口、枚举和委托)定义行为和数据,以及语句和表达式在运行时执行工作。 构建入口点的方式取决于所选的应用程序样式。

选择应用程序样式

创建 C# 程序时,请对如何构建 C# 程序进行两个独立的选择:

  • 基于文件的还是基于项目的?
    • 基于文件的应用从没有项目文件的单个 .cs 文件运行。
    • 基于项目的应用使用 .csproj 文件,并且可以跨越多个源文件。
  • 顶层语句或 Main 方法?
    • 顶级语句允许直接在文件顶部编写可执行代码。
    • 方法 Main 将入口点包装在显式静态方法中。

基于项目的应用和基于文件的应用都支持任一入口点样式。

基于文件的应用与基于项目的应用

从 C# 14 和 .NET 10 开始, 基于文件的应用 使你无需项目文件即可运行包含在单个 *.cs 文件中的程序。 将以下代码保存到一个名为 hello-world.cs 的文件中,然后使用 dotnet run hello-world.csdotnet hello-world.cs 运行它。

#!/usr/bin/env dotnet
Console.WriteLine("Hello, World!");

注释

#! 行允许 Unix shell 直接运行文件。 在任何 Unix 系统上,设置 execute+x) 权限并从命令行运行文件。

基于文件的应用支持所有 C# 语法,并且可以使用 预处理器指令 来配置生成系统。 对小型命令行实用工具、原型和试验使用基于文件的应用。 基于文件的应用由目录中的单个文件组成:

my-app/
└── hello-world.cs

基于项目的应用使用.csproj文件和 .NET CLI 命令dotnet newdotnet builddotnet run工作流。 当你的程序跨越多个文件或需要精细的生成配置时,请选择基于项目的应用。 基于项目的应用包括项目文件以及一个或多个源文件:

my-app/
├── my-app.csproj
├── Program.cs
├── Models/
│   └── Person.cs
└── Services/
    └── GreetingService.cs

如果基于文件的应用增长,可以轻松将其转换为基于项目的应用。 运行 dotnet project convert 以从现有源文件生成项目文件。

如果你知道你的应用从一开始就需要多个源文件,请从基于项目的应用开始。 避免转换步骤,并可以立即将代码组织到单独的文件中。

顶级语句与 Main 方法

通过使用 顶级语句,可以直接在一个文件中编写可执行代码,而无需将其包装在类和 Main 方法中。 在使用dotnet new console创建新的控制台应用程序时,此样式为默认值。 以下示例演示使用 顶级语句的新式 C# 程序:

Console.WriteLine("Hello, World!");

namespace YourNamespace
{
    class YourClass
    {
    }

    struct YourStruct
    {
    }

    interface IYourInterface
    {
    }

    delegate int YourDelegate();

    enum YourEnum
    {
    }
}

项目中只有一个文件可以有顶级语句,入口点是该文件中的第一行程序文本。 生成较大的程序时,将包含更多程序元素。

还可以将显式静态 Main 方法定义为程序的入口点:

// A skeleton of a C# program using an explicit Main method
namespace YourNamespace;

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

两种入口点样式都适用于基于文件的和基于项目的应用。 这两种样式都支持相同的功能。

生成和运行 C# 程序

C# 是 一种已编译 的语言。 对于基于项目的应用,使用 dotnet build 命令将源文件编译为二进制包。 使用dotnet run一步生成并运行。 dotnet.NET SDK 中包含的 CLI 提供了许多用于创建、生成和管理 C# 项目的工具

对于基于文件的应用, dotnet run hello-world.cs 直接编译并运行单个文件 - 无需项目文件。

表达式和语句

如果遵循 入门 教程,则已编写表达式和语句。 你键入的每一行代码都是一行或另一行(或两者)。 现在,让我们定义这些术语。

表达式和语句是 C# 程序的基本构建基块。 表达式生成值。 语句执行操作,通常以分号结尾。

以下是表达式:

  • 42 (文本值)
  • x + y (算术运算)
  • Math.Max(a, b) (生成值的方法调用)
  • condition ? trueValue : falseValue (条件表达式)
  • new Person("John") (对象创建)

语句执行操作。 语句控制程序流、声明变量或调用操作。 以下是声明:

  • int x;(申报单)
  • int x = 42; (初始化声明语句)
  • Console.WriteLine("Hello"); (方法调用语句)
  • if (condition) { /* code */ } (条件语句)
  • return result;(return 语句)

语句通常包含表达式,表达式可以嵌套在其他表达式内。 例如,以下声明语句将加法表达式的结果赋给 f。 该加法表达式添加两个方法调用表达式的结果:

var maxResult = Math.Max(a, b) + Math.Max(c, d);

有关语句的详细信息,请参阅 语句。 有关表达式主体成员的信息,请参阅 表达式主体成员