静态字段和方法
本课属于 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 是静态字段。
挑战
简单我们来构建一个订单跟踪系统,使用静态成员跟踪应用中创建的所有订单。
你需要创建两个文件来组织代码:
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}
}
}
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
面向对象编程中的所有课
自己练习: C# 在线编译器