是这样的,比如有一个数据库操作类
class mydb
{
  public static void myselect()
      {....}
}
大概意思就是这么一个形式,这个类包含了对数据库的增,删,改,读,操作的一些方法, 我习惯把这些方法都写成静态的。然后在使用的时候,就用
mydb.myselect(....) 就可以了,不用声明实例,我觉得很方便.最近我看到有人这么写类似的类,还是我上面的类,但是他把数据库操作方法,不写成静态的
class mydb
{
  public void myselect()
      {....}
}
其它的,都和我一样,在这个类成员调用的时候,是用这个方式来写的
(new mydb()).myselect()..这个用法,我也能理解,也会使用, 
我想听听大家的说法,在做项目开发的时候,用哪种方法声明类方法比较好? 为什么? 谢谢

解决方案 »

  1.   

    大体上是写成静态比较好, 静态的函数生命周期是整个程序周期, lz可以从这一方面考虑.但是你的数据库链接等这些资源要想快速回收的话,普通的class也可以考虑.
      

  2.   

    我觉得还是静态方法的好。对net框架的底层是如何实现静态方法的,我不清楚。
    不过,我觉得,实例化这种方法,在每次操作数据库时都需要去实例化一个对象,不仅占有空间,而且影响速度。呵呵。我觉得用静态方法就没有这个问题,
    至于数据库连接的问题,在每个方法结束时记得是否链接资源就行了。呵呵
      

  3.   

    我认为这样不妥,如果你的方法为静态的话,那么如果有两个线程前后进来的时候会如何?本来前面一个参数是A,结果当前面一个进去后,后面一个又进来相当于修改了前面一个带进去的参数,结果前面一个返回的结果可能就有错。如果用SINGLETON去解决的话性能的代价怎么解决?
    而且实例化一个对象后很快就能被GC给回收掉,这方面的性能损失我个人认为很小。
    不知大家意见如何
      

  4.   


    普通的静态方法是不会有同步问题的,除非共用了某个变量,可以通过lock解决
    静态方法中创建的对象一样会及时垃圾回收,不存在性能问题
    singleton方式一样
      

  5.   


    但是你的LOCK和SINGLETON方式本来带来的性能方面的损失怎么解决?你一个方法在某个时间段只能有一个线程来访问啊。如果你这个方法体很复杂你LOCK下那不是要后面的等死?
    PS:顺便请解释下你提到的
    普通的静态方法是不会有同步问题的,除非共用了某个变量这句
      

  6.   

    .net 帮助里面有介绍的, 如果重复使用一个静态的类的话,还是用实例的比较好
      

  7.   

    静态方法和实例化方法的区别:http://www.cnblogs.com/daniel206/archive/2008/01/10/1032908.html
    类中的static方法:http://topic.csdn.net/t/20051107/22/4377925.html#
      

  8.   

    一些数据库常用,通用的方法,肯定是写在静态方法里。
    比如SqlHelp就是这样