.NET中静态的知识
2021-02-20 13:20
标签:原因 rac 成员 引用 targe cep 回收 生成 lan 原文链接 .NET中静态的知识 标签:原因 rac 成员 引用 targe cep 回收 生成 lan 原文地址:https://www.cnblogs.com/ZkbFighting/p/12916535.html1,C#中没有全局变量的概念,这意味着所有的成员变量只有该类的实例(new 出来的对象)才能操作这些数据。
所以出现了静态变量的概念,保存类的公共信息,所有该类的实例共享该值。有时要对这些静态变量从外部源中进行初始化,所以就有了静态构造函数。
静态变量也有修饰符:public,protected,private和internal。
静态方法与静态变量一样,不属于任何特定的实例,属于类全体成员共有,用类名来调用。
" 静态方法只能访问类的静态成员,不能访问类的非静态成员,因为静态方法是通过类来调用的,而这时候有可能类没有实例化;
非静态方法可以访问类的静态成员,也可以访问非静态成员。"
这句话意识是:在一个类中,要是有静态方法,静态方法中使用的字段要是静态的字段
在非静态方法中,可以调用静态字段,也可以调用非静态字段 静态变量在声明开始,就一直存储在内存中,直到整个程序终止。
而实例成员在创建对象时分配内存。 new的时候
静态变量的生存周期为应用程序和存在周期;2, 静态构造函数,自己也没看,看不下去
静态构造函数是C#的一个新特性,在编程过程中用处并不广,它的主要目的是用于初始化一些静态变量。
因为静态构造函数是属于类的,而不属于任何一个实例,所以静态构造函数只会被执行一次,而且是在创建此类的第一个实例或引用任何静态成员之前,由.NET自动调用的。确切的说,静态构造函数是在加载类时执行的。
因为静态构造函数是.NET调用的,所以修饰符就没有意义了,也不能有参数,也就是说一个类中只能有一个静态构造函数。可以说静态构造函数是私有的。
在创建第一个类实例或任何静态成员被引用时,.NET将自动调用静态构造函数来初始化类。也就是说我们无法直接调用静态构造函数,也不可能知道静态构造函数何时会被调用。
无参数的构造函数可以与静态构造函数共存,因为一个属于类,一个属于实例。静态构造函数是在加载类时执行的,而实例构造函数是在创建实例时执行的。
静态构造函数最多只运行一次。
静态构造函数不可以被继承。
如果没有写静态构造函数,而类中包含带有初始值设定的静态成员,那么编译器会自动生成默认的静态构造函数。
如果类中包含用来开始执行的Main方法,则该类的静态构造函数将在调用Main方法之前执行。静态构造函数是在加载类时执行的。
如果类中的静态字段带有初始化,则静态字段的初始化语句将在静态构造函数之前运行。4,Main()函数是程序的入口,要确保首先执行,所以要定义成为静态的。
5,类中的静态变量是在一开始就分配内存并初始化好的,而类中的非静态变量是在创建实例时分配内存并初始化的
静态类和类成员用于创建无需创建类的实例就能够访问的数据和函数。
静态类成员可用于分离独立于任何对象标识的数据和行为:无论对象发生什么更改,这些数据和函数都不会随之变化。
当类中没有依赖对象标识的数据或行为时,就可以使用静态类1、效率,直接加载到内存
2、静态类是什么?基类是什么,访问修饰符相当什么
3、静态类为什么保存在内存中的栈中?
4、节省内存,程序域共享
所以为什么要使用静态类主要原因为:
1、执行效率
2、节省内存
3、程序域共享
A:不需要实例化类,就可以直接调用
B:生命周期不一样,不加static的话,要等到类实例话才运行。什么时候用静态方法,有什么好处?------解决方案--------------------
当类不会有多个对象而是更像是一个公用类的时候,或当方法或属性是“公用”信息的时候声明成静态的比较好。
//自己项目中的CommonClass 里面的公共类方法就可以使用静态来修饰下。
而当类、方法或属性可能比较个性的时候则不声明成静态的。
比如从数据库获取数据的方法可以声明成静态的(看了下链接数据库的公共类,都是静态的方法),而像画图中的圆,线,矩形则可以定义成非静态的。
------解决方案--------------------
从内存占用上来说,静态的虽不需要实例化,但一直占用内存,所以访问速度较快,所以静态类不能太大太占资源。
而非静态类只有被实例化后才占内存,需要“调入”内存后才能执行。相对较慢。
------解决方案--------------------
还是我来解释一下吧,,楼主仔细的琢磨一下.
静态类在定义的时候是直接从System.Object类派生的,因此调用类的接口将没有任何意义.
又由于将类定义成static后会在IL中同时标记为abstract和sealed的,,因此不能实例化.
在托管堆中不会分配连续的物理内存地址,因此也不会对其进行垃圾回收.
但它又不同于值类型(struct类型),因为他还是从Object类派生的,,因此可以给他定义相应的静态成员(字段,方法,属性和事件).
可以这么说静态类是C#中一个比较特殊的类型.在使用的时候尽量将程序使用频繁的方法写进去.从而提高程序的性能.
因为内存的读取速度将是外存无法比拟的.
上一篇:js获取当前系统时间