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);时,它是一条表达式语句。
有关语句的详细信息,请参阅 语句。 有关表达式主体成员和其他表达式特性的详细信息,请参阅表达式主体成员。
相关部分
在基本原理指南的 类型 部分中了解这些程序元素: