在 C#(以及其他许多面向对象编程语言)中,static 是一个关键字,用于修饰类的成员(方法、属性、字段等)。当一个成员被声明为 static 时,它表示这个成员属于类本身,而不是类的实例(对象)。因此,您无需创建类的实例就可以访问静态成员。
以下是 static 关键字的一些特点:
- 静态成员只能访问静态成员:静态方法和属性只能访问类中的其他静态方法和属性,而不能直接访问非静态成员。这是因为非静态成员属于类的实例,而静态成员不依赖于特定实例。
- 静态成员在内存中只有一个实例:与每个对象实例都有自己的非静态成员不同,静态成员在内存中只有一个实例,它们被所有类的实例共享。
- 静态成员在类级别上进行初始化:静态成员在程序运行时在类级别上进行初始化,通常在应用程序启动时完成。非静态成员在每个对象实例化时进行初始化。
下面是一个简单的C#示例,说明了如何使用 static 关键字:
class MyClass
{
public static int staticCounter = 0;
public int instanceCounter = 0;
public static void IncrementStaticCounter()
{
staticCounter++;
}
public void IncrementInstanceCounter()
{
instanceCounter++;
}
}
class Program
{
static void Main(string[] args)
{
MyClass obj1 = new MyClass();
MyClass obj2 = new MyClass();
MyClass.IncrementStaticCounter(); // 通过类名直接调用静态方法
obj1.IncrementInstanceCounter(); // 通过对象实例调用非静态方法
Console.WriteLine("Static counter: " + MyClass.staticCounter); // 输出:1
Console.WriteLine("Instance counter (obj1): " + obj1.instanceCounter); // 输出:1
Console.WriteLine("Instance counter (obj2): " + obj2.instanceCounter); // 输出:0
}
}
在这个例子中,我们创建了一个名为 MyClass 的类,其中包含一个静态成员 staticCounter 和一个非静态成员 instanceCounter。我们还定义了两个方法,一个用于递增静态计数器,另一个用于递增实例计数器。请注意,静态方法和属性可以通过类名直接访问,而非静态方法和属性需要通过类的实例进行访问。
在英语中,“static” 这个词通常具有以下含义:
- 静止的,不变的:表示某物或状态保持不变,没有发生变化,不受外部因素影响。
- 静电的:与静电(不流动的电荷)相关的现象或物体。
在编程语境中,“static” 这个词的含义与英语中的含义有关联。当我们在编程中使用 “static” 关键字时,它表示某个成员(如方法、属性、字段等)属于类本身,而不是类的实例。静态成员在内存中只有一个实例,它们在所有对象实例之间共享,从某种程度上说,它们是"静止的"或"不变的"。