静态和实例方法
使用 static
修饰符声明的方法是静态方法。 静态方法不对特定的实例起作用,只能直接访问静态成员。
未使用 static
修饰符声明的方法是实例方法。 实例方法对特定的实例起作用,并能够访问静态和实例成员。 其中调用实例方法的实例可以作为 this
显式访问。 在静态方法中引用 this
会生成错误。
以下 Entity
类包含静态和实例成员。
C#复制
class Entity
{
static int s_nextSerialNo;
int _serialNo;
public Entity()
{
_serialNo = s_nextSerialNo++;
}
public int GetSerialNo()
{
return _serialNo;
}
public static int GetNextSerialNo()
{
return s_nextSerialNo;
}
public static void SetNextSerialNo(int value)
{
s_nextSerialNo = value;
}
}
每个 Entity
实例均有一个序列号(很可能包含此处未显示的其他一些信息)。 Entity
构造函数(类似于实例方法)将新实例初始化为包含下一个可用的序列号。 由于构造函数是实例成员,因此可以访问 _serialNo
实例字段和 s_nextSerialNo
静态字段。
GetNextSerialNo
和 SetNextSerialNo
静态方法可以访问 s_nextSerialNo
静态字段,但如果直接访问 _serialNo
实例字段,则会生成错误。
下例显示了 Entity
类的用法。
C#复制
Entity.SetNextSerialNo(1000);
Entity e1 = new();
Entity e2 = new();
Console.WriteLine(e1.GetSerialNo()); // Outputs "1000"
Console.WriteLine(e2.GetSerialNo()); // Outputs "1001"
Console.WriteLine(Entity.GetNextSerialNo()); // Outputs "1002"
SetNextSerialNo
和 GetNextSerialNo
静态方法在类中进行调用,而 GetSerialNo
实例方法则是在类实例中进行调用。