首页 新闻 会员 周边 捐助

关于静态方法的困惑

0
[已解决问题] 解决于 2010-08-18 08:12

最近看了Discuzi的源代码,发现除了Discuz.Data.SqlServer这个类库里直接跟数据为交道的没有用静态方法,其他的如Discuz.Data里都是静态方法,而业务层Discuz.Forum里用的也是静态方法。一句话,这里是用了大量的静态方法,我不知道这样做会不会有什么问题。另外是,什么时候该用静态方法,什么时候不该用?

李.net的主页 李.net | 小虾三级 | 园豆:730
提问于:2010-08-13 10:21
< >
分享
最佳答案
0

静态方法体现不出面向对象的特性,不需要实列化就可以调用。

静态方法一般都是被封装在工具类里的。

Astar | 高人七级 |园豆:40805 | 2010-08-13 10:51
是的,我以前的项目也是都用在工具类里的,但像Discuzi里,业务层,不应该作为工具类。我记得petshop以前的版本也是用静态类的,但最新的里面都不用静态类了,要用的时候再去实例化
李.net | 园豆:730 (小虾三级) | 2010-08-13 10:53
@李.net:还有一点,相对来说,静态方法要省点内存空间,不然每次都得实例化。PetShop是按照标准来写的,有接口要继承或者多数据库下要进行强转。Discuzi就没要求那么高了,怎么方便怎么来。
Astar | 园豆:40805 (高人七级) | 2010-08-13 10:56
其他回答(2)
0

有个简单的方法来区分,如果一个方法和具体的业务逻辑没有什么关系,仅仅是为了提供一种帮助、辅助的功能的时候可以使用静态。

kyo-yo | 园豆:5587 (大侠五级) | 2010-08-13 10:52
0

静态方法不用初始化,直接调用。

非静态方法必须new 实例才可以使用。

一般情况下,对一些辅助型、没有状态变化的方法或者类进行静态化,静态化会在内存中分配一块内存直到程序生命周期结束。

非静态方法或类,在调用方法或页面生命周期结束后被垃圾回收。

具体是用场景应该看实际情况。不建议使用数量巨大的静态方法、类。

http://blog.csdn.net/wangsky2/archive/2010/02/09/5302149.aspx

邢少 | 园豆:10926 (专家六级) | 2010-08-13 11:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册