在很多语言中,对于一个成员变量前边的static关键字,功能就是不需要实例化这个类,就能访问这个变量。在C#的语法中,含有static的变量只能通过类名访问,不含static的一般变量只能通过实例对象访问。
但是为什么有时候需要把整个类标记为static的类?
语法上要求,在一个static的类里边,所有的成员变量都必须是static关键字修饰的,因此只能通过类名来访问。还有一点,static的变量可以通过static方法来改变其值。
如果不把整个类标记为static,依然可以通过类名来访问所有的变量,那么为什么非要设置为静态类呢?
之所以这样做,个人觉得最多的作用是能够明确的告诉开发者这个类是干什么的,就是工具类,而且是非常通用的工具类,比如说Math,用的时候就直接用其静态的方法。就像下边图片所说的,你用Math math= new Math() 然后再用对象调用其方法,根本没有任何意义。
把一个方法标记为static会带来一点性能上的提升,但是基本上用户感觉不到,因为变化很小。更深刻一点,static的变量与方法都是存在了静态代码区,而不是堆内存与栈内存中,所以性能上高点。
参考:
http://stackoverflow.com/questions/241339/when-to-use-static-classes-in-c-sharp
http://theburningmonk.com/2010/07/static-vs-non-static-method-in-csharp/