c# 梳理一 static,静态类,静态构造函数,静态字段

c# 梳理一 Static关键字


一、static

static 关键字用于声明静态成员,包含静态字段,静态方法,静态属性,和静态构造函数。静态成员存在于整个应用程序的生命周期中,而不是特定对象的实例。


二、静态字段,静态方法,静态属性,和静态构造函数,静态类

1.静态字段,静态方法,静态属性

存储位置:

静态字段(变量): 静态字段存储在数据段(data segment)中,这是应用程序的内存分区之一。这些字段在程序启动时就分配内存。
静态方法、属性: 静态方法和属性本身不存储数据,它们的代码存储在程序的代码段,而且它们无需实例化即可调用。

生命周期:

静态字段(变量): 静态字段的生命周期与应用程序的生命周期相同,它们在应用程序启动时被分配内存,在应用程序关闭时释放。
静态方法、属性: 静态方法和属性的生命周期也与应用程序的生命周期相同。

共享性:

静态字段(变量): 所有类的实例共享相同的静态字段。如果一个实例修改了静态字段的值,其他实例也能看到修改后的值。
静态方法、属性: 由于静态方法和属性不依赖于对象的实例,它们可以被类直接调用,而不需要创建对象。因此,它们可以被所有实例共享。

线程安全性:

静态字段(变量): 静态字段在多线程环境中可能存在竞态条件,因此需要考虑线程安全性。可以使用锁或其他同步机制来确保在多线程环境下的安全访问。
静态方法、属性: 静态方法和属性也需要考虑线程安全性,尤其是在它们访问共享资源或数据时。


2.静态类,静态构造函数

2.1静态构造函数

先举例:

class SimpleClass
{
    // Static variable that must be initialized at run time.
    static readonly long baseline;
    static SimpleClass()
    {
        baseline = DateTime.Now.Ticks;
    }
}

如上,静态构造函数 用于初始化任何静态数据,或只执行一次的特定操作
注意:

1.静态构造函数在创建第一个实例或者任何静态成员之前调用静态构造函数,且静态构造函数最多调用一次
2.静态构造函数不使用访问修饰符或不具有参数
3.静态构造函数在一个类/结构中只能有一个,且不能继承或者重载
4.静态构造函数不能直接调用 仅由CLR自动调用

2.2静态类

静态类所有成员都必须是静态成员,包括属性,构造函数,方法。
静态类基本上和只包含静态成员和私有构造函数的类相同,不同点在于

1.静态类的静态构造函数是编译器自动调用的,可确保不会意外添加其他实例成员
2.静态类不能实例化
3.静态类会进行密封
4.静态类不能包含实例构造函数

所以静态类可以用作只对输入参数进行操作并且不必获取或设置任何内部实例字段的方法集的方便容器,例如,在 .NET 类库中,静态 System.Math 类包含执行数学运算,而无需存储或检索对 Math 类特定实例唯一的数据的方法。

你可能感兴趣的:(c#,c#)