日期:2014-05-18  浏览次数:20837 次

走进C#静态方法

        前一阵子项目中,一直在用静态方法,或者是静态变量,就从网上查了一些资料做了小小的一个梳理与总结,便用加深理解。

        那什么是静态方法呢?最直观上静态方法采用了使用了static 修饰符。静态方法作为一种特殊的成员方法,它可以看作为是属于类本身的一种方法,而不属于类的某一个具体的实例。所以对静态方法不需要类的实例化就可以使用了,使用时格式一般而是采用类名.静态方法。

       


 

         由于静态方法的特殊性,什么情况下我们使用静态方法呢?在程序中如何可以利用静态字段或者静态构造方法,通常适用于于一些不会经常变化而又频繁使用的数据,这时静态方法效率要稍微高一些,比如连接字符串,配置信息等,当满足上面所说的两点时,进行一次读取,以后就可以方便的使用了,同时也节约了托管资源,因为对于静态成员,一个静态字段只标识一个存储位置。

        静态和非静态的方法在写入内存方面又有什么区别呢?不同与非静态方法需要多个内存,静态方法创建后,使用的一直是同一块内存,这样,静态方法的效率是相对高一些的,但是,静态方法是无法进行自行销毁。而不管这些方法、属性以后有没有用到,即使是没有人再访问程序,这部分内存仍然不会释放。还有就是,所有访问者看到的静态属性的数据几乎都是一样的,比如A用户设置了UserName这个属性,B用户访问的时候,得到的UserName仍然是A用户设置的那个。这种特性,如果用在固定数据中,那不会有太大问题,比如连接字符串之类的。

        静态方法又有什么缺陷呢?当说到缺点时,我个人认识,就是在面向对象编程方面的欠缺,静态方法是不支持使用抽象或虚的方法进行扩展和多态的,这样,很大的限制了软件的灵活性,所以在使用的时候,还是要慎重,如果一个方法与他所在类的实例对象无关,那么它就应该是静态的,而不应该把它写成实例方法。当然你完全可以把所有的实例方法都写成静态的,将实例作为参数传入即可,一般情况下可能不会出什么问题。从面向对象的角度上来说,在抉择使用实例化方法或静态方法时,应该根据是否该方法和实例化对象具有逻辑上的相关性,如果是就应该使用实例化对象反之使用静态方法。这只是从面向对象角度上来说的。如果从线程安全、性能、兼容性上来看也是选用实例化方法为宜。

         C#静态方法的使用情况的一些相关内容就向你介绍到这里,希望对你学习和使用C#静态方法有所帮助。

 

4楼lfmilaoshi1小时前
非常好的思考。。。米老师
3楼yjjm19902小时前
在保存用户登录信息的时候用到静态属性了!
2楼wushuai13468小时前
谢谢楼主分享.平时工作中用到不少,有些疑问:1.静态方法的使用会不会因为在多线程中的使用而导致一些逻辑上的混乱,比如共享一个变量的问题;2.这种静态方法来处理固定数据的方式和使用工厂方法的模式有什么区别呢?;3.看到有些书上推荐将静态类声明为sealed,构造函数private,不晓得有没有必要.
1楼wwwwenhuan8小时前
静态方法,用的比较少。不过SqlHelper中的方法好像都是静态方法。