浅谈静态方法与静态变量
生命周期
静态方法与静态变量初始化是第一次访问时由CLR自动分配一块特殊的内存用于存储静态的代码,进程结束时回收。
关于性能
很多初学者会产生一个误区,认为声明静态后不会回收,会导致系统变慢,当然太多静态的静态的会这样,一般来说一个几百万字的函数也就几兆而已,在一般计算机上对性能影响并不大。静态方法比非静态方法少一个this参数,也不需要进行虚函数解析,效率上会高一些。
静态变量的并发
静态变量发生并发时,会出现与时间有关的错误,一般通过加锁解决。
静态方法何时使用
如果某些操作不依赖具体实例,那它就是静态的,反之如果某些操作是依赖具体实例的(例如访问一个特定会员的名称),那它就应该是实例化的。
静态方法不用new对象可以直接调用
1.与类相关与对象无关
2.不需要对象的“轻”方法
3.工厂方法
如果某个方法是用频率较高,或者方法本身通用性较强,无需初始化类成员变量,则可以使用静态方法,那样方便,速度也快.
可以直接拿来就用的方法,就算是静态的.
肯定不涉及具体对象,因为静态方法内,是无法直接使用任何非静态成员的。
1.制作工具类
2.可以当作"作局"对象或方法来使用
不需要生成对象的
经常频繁使用的
工具类里的(如SqlHelper)
所有对象共有的方法
再不关系到任何于特定对象相关的操作
比如学生的年龄就是学生的相关。
修改学生的年龄就不适合用静态方法。
一般来说,如果你的方法里没有用到this关键字,
那就适合用静态方法
通常通用的类中一些常用的方法可以设计为静态类
只要是没有用到类的状态信息,只从参数获取信息的都可以为静态的
可以实现某些特殊的设计模式:如Singleton
由于没有this指针,可以把某些系统API的回调函数以静态函数的形式封装到类的内部
总之,从OOA/OOD的角度考虑,一切不需要实例化就可以有确定行为方式的函数都应该设计成静态的
注:上述一部份取自大牛博文,欢迎大家批阅。