首页 > 其他 > 详细

静态类和非静态类以及静态方法和非静态方法的区别

时间:2016-01-18 18:46:57      阅读:135      评论:0      收藏:0      [点我收藏+]

1、静态类中不能包括非静态成员,比如非静态方法、构造函数;非静态类中可以包括静态成员。如果不按照这种规则静态类编译器会检查报错。

简而言之就是:静态类中所有的成员必须是静态成员,但是静态成员不一定是在静态类中 。

2、静态类无法实例化,其成员可以直接使用;非静态类中的静态成员不需要实例化,可以直接使用,非静态类中的非静态成员必须实例化。

简而言之就是:不管在哪静态成员都不需要实例化其所在类,而非静态成员必须实例化其所在类。

3、静态成员之所以执行速度快,是因为其在编译的时候编译器放在了静态区(保存自动全局变量和 static 变量)静态区的内容在总个程序的生命周期内都存在,而普通类的中的非静态成员需要实例化,在栈中存引用地址,堆中存实例对象,从而获取方法,所以速度慢。

静态成员变量在程序启动的时候,就全部装入内存的静态区中,而不管这些方法、属性以后有没有用到
。即使是没有人再访问程序,这部分内存仍然不会释放。

4、静态成员变量是共享的 也就是说当某个类的实例修改了该静态成员变量,其修改值为该类的其它
所有实例所见。

5、静态方法和属性不能访问其包含类型中的非静态字段和事件。

6、静态方法只能被重载,而不能被重写,因为静态方法不属于类的实例成员。

7、C# 不支持静态局部变量(在方法内部定义静态变量)。

8、静态类是密封类(sealed),无法被继承。其密封是有自我保护的作用,并且符合编程三大思想之封装思想。

9、静态成员等同于全局变量,整个系统中存在统一块区域(静态区)中,是共享的,比如static into num=0;编译的时候num就已经是1了,A线程改了其值为1,B线程获取的时候num就是1了。

静态类和非静态类以及静态方法和非静态方法的区别

原文:http://www.cnblogs.com/zhangchengye/p/5140044.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!