Menu
CoddyTech

静态字段和方法

本课属于 Coddy C# 学习旅程的“面向对象编程”单元。第 12 课,共 70 课。

到目前为止,我们创建的每个字段和方法都属于单个对象。但有时,你需要一些属于类本身、由所有实例共享的数据或行为。这时就要用到 static 关键字。

静态字段由一个类的所有对象共享。无论你创建多少个实例,都只有一个副本:

public class Player
{
    public static int TotalPlayers = 0;
    public string Name { get; set; }
    
    public Player(string name)
    {
        Name = name;
        TotalPlayers++;
    }
}

每次创建一个新的 Player,TotalPlayers 都会增加。所有玩家共用这个计数器。

静态方法属于类,无需创建对象即可调用:

public class Calculator
{
    public static int Add(int a, int b)
    {
        return a + b;
    }
}

// 通过类调用,而不是通过实例调用
int result = Calculator.Add(5, 3);

注意,访问静态成员时要使用类名,而不是对象引用。静态方法无法访问实例字段,也不能使用 this,因为它们不属于任何特定对象。

你已经用过静态成员,只是自己没有意识到。Console.WriteLine() 是静态方法,Math.PI 是静态字段。

challenge icon

挑战

简单

我们来构建一个订单跟踪系统,使用静态成员跟踪应用中创建的所有订单。

你需要创建两个文件来组织代码:

  • Order.cs:在 OrderSystem 命名空间中定义一个 Order 类。每个订单都应有一个实例属性 OrderId(int)和 CustomerName(string)。这个类还应使用静态字段 TotalOrders 跟踪已创建订单的总数,并提供一个静态方法 GetNextOrderId(),用于返回下一个可用的订单 ID(从 1 开始)。构造函数应接收客户姓名,通过静态方法自动分配订单 ID,并增加订单总数。
  • Program.cs:在主文件中,根据输入创建订单,并显示订单详情和订单总数。

你会收到两个输入,分别表示两个不同订单的客户姓名。

按照以下格式打印每个订单的详情:

Order #{OrderId} - Customer: {CustomerName}

创建两个订单后,打印订单总数:

Total Orders: {TotalOrders}

例如,如果输入是 Alice 和 Bob,输出应为:

Order #1 - Customer: Alice
Order #2 - Customer: Bob
Total Orders: 2

亲手试试

using System;
using OrderSystem;

class Program
{
    public static void Main(string[] args)
    {
        // 读取客户姓名
        string customer1 = Console.ReadLine();
        string customer2 = Console.ReadLine();

        // TODO: 用客户姓名创建两个 Order 对象

        // TODO: 按以下格式输出每个订单的详细信息:
        // Order #{OrderId} - Customer: {CustomerName}

        // TODO: 按以下格式输出订单总数:
        // Total Orders: {TotalOrders}
    }
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

面向对象编程中的所有课

自己练习: C# 在线编译器