码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-01-18 18:49:35      阅读:112      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!