1、静态类中不能包括非静态成员,比如非静态方法、构造函数;非静态类中可以包括静态成员。如果不按照这种规则静态类编译器会检查报错。
简而言之就是:静态类中所有的成员必须是静态成员,但是静态成员不一定是在静态类中 。
2、静态类无法实例化,其成员可以直接使用;非静态类中的静态成员不需要实例化,可以直接使用,非静态类中的非静态成员必须实例化。
简而言之就是:不管在哪静态成员都不需要实例化其所在类,而非静态成员必须实例化其所在类。
3、静态成员之所以执行速度快,是因为其在编译的时候编译器放在了静态区(保存自动全局变量和 static 变量)静态区的内容在总个程序的生命周期内都存在,而普通类的中的非静态成员需要实例化,在栈中存引用地址,堆中存实例对象,从而获取方法,所以速度慢。
静态成员变量在程序启动的时候,就全部装入内存的静态区中,而不管这些方法、属性以后有没有用到
。即使是没有人再访问程序,这部分内存仍然不会释放。
4、静态成员变量是共享的 也就是说当某个类的实例修改了该静态成员变量,其修改值为该类的其它
所有实例所见。
5、静态方法和属性不能访问其包含类型中的非静态字段和事件。
6、静态方法只能被重载,而不能被重写,因为静态方法不属于类的实例成员。
7、C# 不支持静态局部变量(在方法内部定义静态变量)。
8、静态类是密封类(sealed),无法被继承。其密封是有自我保护的作用,并且符合编程三大思想之封装思想。
9、静态成员等同于全局变量,整个系统中存在统一块区域(静态区)中,是共享的,比如static into num=0;编译的时候num就已经是1了,A线程改了其值为1,B线程获取的时候num就是1了。
时间: 2024-10-05 03:16:36