C# 程序的常规结构

C# 程序由一个或多个文件组成。 每个文件都包含零个或多个命名空间。 命名空间包含类、结构、接口、枚举和委托或其他命名空间等类型。 下面的示例是包含所有这些元素的 C# 程序的框架。

using System;

Console.WriteLine("Hello world!");

namespace YourNamespace
{
    class YourClass
    {
    }

    struct YourStruct
    {
    }

    interface IYourInterface
    {
    }

    delegate int YourDelegate();

    enum YourEnum
    {
    }

    namespace YourNestedNamespace
    {
        struct YourStruct
        {
        }
    }
}

前面的示例对程序的入口点使用 顶级语句。 只有一个文件可以有顶级语句。 程序的入口点是该文件中程序文本的第一个文本行。 在本例中,该值为 Console.WriteLine("Hello world!");。 还可以创建一个名为 Main 的静态方法作为程序的入口点,如以下示例所示:

// A skeleton of a C# program
using System;
namespace YourNamespace
{
    class YourClass
    {
    }

    struct YourStruct
    {
    }

    interface IYourInterface
    {
    }

    delegate int YourDelegate();

    enum YourEnum
    {
    }

    namespace YourNestedNamespace
    {
        struct YourStruct
        {
        }
    }

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

在这种情况下,程序从方法的 Main 左大括号开始,即 Console.WriteLine("Hello world!");

生成和运行 C# 程序

C# 是 一种已编译 的语言。 在大多数 C# 程序中,使用 dotnet build 命令将一组源文件编译为二进制包。 然后,使用 dotnet run 命令运行程序。 (可以简化此过程,因为 dotnet run 会在必要时编译程序后再运行它。)这些工具支持丰富的配置选项和命令行开关。 . dotnet NET SDK 中包含的命令行接口(CLI)提供了许多 工具来 生成和修改 C# 文件。

从 C# 14 和 .NET 10 开始,可以创建 基于文件的程序,从而简化 C# 程序的生成和运行。 使用 dotnet run 命令运行包含在单个 *.cs 文件中的程序。 例如,如果以下代码片段存储在名为 hello-world.cs 的文件中,可以通过键入 dotnet run hello-world.cs 运行它。

#!/usr/local/share/dotnet/dotnet run
Console.WriteLine("Hello, World!");

程序的第一行包含 Unix shell 的 #! 序列。 CLI 的dotnet位置可能因不同的发行版而异。 在任何 Unix 系统上,如果对 C# 文件设置了 execute+x) 权限,则可以从命令行运行 C# 文件:

./hello-world.cs

这些程序的源必须是单个文件,否则所有 C# 语法都有效。 可以将基于文件的程序用于小型命令行实用工具、原型或其他试验。 基于文件的程序允许 预处理器指令 配置生成系统。

表达式和语句

C# 程序是使用 表达式语句生成的。 表达式生成值,语句执行作:

表达式是计算为单个值的值、变量、运算符和方法调用的组合。 表达式生成结果,可在预期值的位置使用。 以下示例是表达式:

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

语句是执行操作的完整指令。 语句不返回值;相反,它们控制程序流、声明变量或执行作。 以下示例是陈述:

  • int x = 42;(申报单)
  • Console.WriteLine("Hello");(表达式语句 - 封装方法调用表达式)
  • if (condition) { /* code */ } (条件语句)
  • return result;(return 语句)

关键区别:表达式计算结果为值,而语句执行操作。 某些构造(如方法调用)可以是两者。 例如,Math.Max(a, b)int result = Math.Max(a, b);中时是一个表达式,但单独写成Math.Max(a, b);时,它是一条表达式语句。

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

在基本原理指南的 类型 部分中了解这些程序元素:

C# 语言规范

有关详细信息,请参阅 基本概念()中的 C# 语言规范。 语言规范是 C# 语法和用法的明确来源。