C#实战小技巧(一):静态类和静态成员

1、静态成员

加“static”关键字的成员即静态成员。

    static int num_1 = 0; //静态成员

    private int num_2 = 0; //实例成员

静态成员:

静态成员和类相关联,访问时不用指定对象,直接使用“类名+.+成员名”即可。

        Class_1.Func_1(); //静态调用

实例成员:

实例成员和对象相关联,访问时需要指定实例对象。

        Class_1 class_1 = new Class_1();//实例调用

        class_1.Func_2();

静态方法可以访问静态成员变量和静态方法,不可以直接访问实例变量和实例方法。实例方法可以直接访问所有变量和方法,当多个实例对象存在时,内存中并不存在所有特定实例方法的拷贝,而是相同类的所有对象都共享每个实例方法的一个拷贝。

2、静态成员与实例成员的区别

存储区别:  

静态成员变量存储于程序的全局变量存储区,其作用域限制为类内部,并且在整个程序运行期间只在内存中拥有一个存储位置,不可拷贝或复制;

实例成员变量存储于对象变量存储区,每个对象都拥有自己的存储区域,每个实例成员只隶属于自己的的对象。

归属区别:

静态成员隶属于类,无论对一个类创建多少个实例,它的静态成员都只有一个副本,在各个地方的改变都会改变其值;

实例成员隶属于它的对象,各自对象对同一个非静态成员值的改变都不互相影响,有多少实例就有多少副本。

生存周期区别:

静态成员在整个程序运行期间都是存在的,程序关闭之后才会被GC回收;

实例成员的生存周期跟随隶属对象,对象消亡就会被回收;

初始化区别:

先初始化类的静态成员,然后才是非静态成员。静态成员只初始化一次。

3、静态类

加“static”关键字的类即静态类,仅包含静态成员,不能使用“ new 关键字创建静态类的实例。

static class class_1

{

    public static string GetName() { return "Name"; }

    public static string GetAddress() { return "Address"; }

}

静态类的主要特点如下:

(1)        仅包含静态成员,函数成员和变量都必须加“static”修饰;

(2)        不能被实例化;

(3)        静态类是密封的,编译器编译时自动生成sealed标记;

(4)        不能包含实例构造函数。

静态类与实例类的主要区别是:

(1)        静态类只在内存中创建一次;

(2)        实例类每次实例化都会在内存创建一次。

静态类的优点在于:

(1)        编译器能够确保不会偶然地添加实例成员,以保证不会创建此类的实例。

(2)        静态类是密封的,因此不可被继承。静态类不能包含构造函数,但仍可声明静态构造函数以分配初始值或设置某个静态状态。

4、应用场景

(1)        在整个应用程序中要共享数据的时候可以使用静态类。

(2)        对于类中包含大量方法且不需要创建对象的场景,可以使用静态类。

(3)        可以把一些常用的工具函数,封装到一个静态类中,使用方便。

猜你喜欢

转载自blog.csdn.net/wzh0316/article/details/77775193