CLR via C#学习笔记-第六章-静态类

6.4 静态类

有一些永远不需要实例化的类,例如Console,Math等。

这些类只有static成员。事实上,这种类的唯一作用就是组合一组相关的成员。

例如Math类就定义了一组执行数学运算的方法。

在C#中,要用static关键字定义不可实例化的类。该关键字只能用于类,不能用于结构(值类型)。

因为CLR总是允许值类型实例化,这是没办法阻止的。

C#编译器对静态类进行了如下限制。

  • 静态类必须直接从街垒System.Object派生,从其他任何基类派生都没有意义。继承只适用于对象,而你不能创建静态类的实例。
  • 静态类不能实现任何接口,只有使用类的实例时,才可调用类的接口方法。
  • 静态类只能定义静态成员(字段,方法,属性,事件),任何实例成员都会导致编译器报错。
  • 静态类不能作为字段、方法参数或局部变量使用,因为他们都代表引用了实例的变量,不允许,会报错。

下面是一个定义了静态成员的静态类。代码虽然能通过编译,有一个警告,但该类没有做任何有意义的事情。

public static class AStaticClass
{
    public static void AStaticMethod(){}
    public static String AStaticProperty()
    {
        get{return s_AStaticField;}
        set{s_AStaticField=value;}
    }
    private static String s_AStaticField;
    public static event EventHandler AStaticEvent;
}

使用关键字static定义类,将导致C#编译器将该类标记为abstract和sealed。

此外,编译器不在类型中生成实例构造器方法。

猜你喜欢

转载自www.cnblogs.com/errornull/p/9749064.html