有一些永远不需要实例化的类,例如Console,Math,Environment和ThreadPool。这些类只有static成员。事实上,这种类唯一的作用就是组合一组相关的成员。例如,Math类就定义了一组执行数学运算的方法。在C#中,要用static关键字定义不可实例化的类。该关键字只能应用于类,不能应用于结构(值类型)。因为CLR总是允许值类型实例化,这是没办法阻止的。
//--
C#编译器对静态类进行了如下限制:
1.静态类必须直接从基类System.Object派生,从其他任何基类派生都没有意义。继承只适用于对象,而你不能创建静态类的实例。
2.静态类不能实现任何接口;这是因为只有使用类的实例时,才可调用类的接口方法。
3.静态类只能定义静态成员(字段、方法、属性和事件),任何实例成员都会导致编译器报错。
4.静态类不能作为字段、方法参数或局部变量使用,因为它们都代表引用了实例的变量,而这是不允许的。