static 关键字用于定义一个静态成员(即静态方法或静态字段)。静态成员是与类相关联的,而不是与类的任何特定实例相关联的
重点:
静态构造函数的执行是通过“静态字段首次访问”的方式触发的。
当代码尝试访问一个类的静态字段时,CLR 系统会检查该类是否已被初始化。
如果尚未初始化,则系统会自动调用该类的静态构造函数进行初始化。
一旦执行完成,则不会再次执行。
//例子
class MyClass {
static int _myStaticField = 0;
static MyClass() {
Console.WriteLine("静态构造函数被调用.");
_myStaticField = 100; // 初始化静态字段
}
}
在上面的代码中,我们定义了一个包含静态字段 _myStaticField
的类 MyClass
。同时还定义了一个静态构造函数。该静态构造函数在静态字段首次访问时被自动调用,并初始化 _myStaticField
字段为 100。
以上述代码为例,假设我们在主函数中创建两个 MyClass
对象,但没有直接访问静态字段 _myStaticField
。此时静态构造函数不会被自动调用,也就是不会有任何输出信息。
class Program {
static void Main(string[] args) {
MyClass obj1 = new MyClass(); // 输出 "静态构造函数被调用."
MyClass obj2 = new MyClass();
}
}
- 静态字段(Static Field)
静态字段是与类相关联的,所有实例共享相同的值。这些字段在程序的生命周期内仅分配一次,并在整个应用程序域中保持状态。
class MyClass { static int myStaticField = 10; }
- 静态方法(Static Method)
与静态字段类似,静态方法是与类相关联的,不需要实例化对象即可调用该方法。它们不依赖于实例变量,并且不能直接访问实例成员。
class MyClass { static void MyStaticMethod() { } }
- 静态构造函数(Static Constructor)
静态构造函数用于初始化静态字段或执行任何仅需在首次使用该类型时完成的操作。它在静态字段首次访问之前自动执行,且只会执行一次。
class MyClass { static int myStaticField; // 静态构造函数
static MyClass() { myStaticField = 100; } }
- 静态类(Static Class)
静态类只包含静态成员,不能被实例化,并且默认情况下是密封的。
static class MyStaticClass { static int myStaticField; static void MyStaticMethod() { } }
总结:static
关键字常用于定义静态成员,并且静态成员的优点是可以在不实例化对象的情况下使用,并且静态成员只分配一次并在整个应用程序域中保持状态。