C#学习基础--抽象类、密封类及类成员

使用 abstract 关键字能够建立不完整且必须在派生类中实现的类和成员。程序员

使用 sealed 关键字能够防止继承之前标记为 virtual 的类或某些类成员。ide

抽象类和类成员函数

经过在类定义前面放置关键字 abstract,能够将类声明为抽象类。  例如:优化

  public abstract class A
    {       
     // Class members here.
    }

抽象类不能实例化。  抽象类的用途是提供一个可供多个派生类共享的通用基类定义。  例如,类库能够定义一个抽象类,将其用做多个类库函数的参数,并要求使用该库的程序员经过建立派生类来提供本身的类实现。spa

抽象类也能够定义抽象方法。  方法是将关键字 abstract 添加到方法的返回类型的前面。  例如:code

public abstract class A
{    
public abstract void DoWork(int i);
}

抽象方法没有实现,因此方法定义后面是分号,而不是常规的方法块。  抽象类的派生类必须实现全部抽象方法。  当抽象类从基类继承虚方法时,抽象类能够使用抽象方法重写该虚方法。  例如:继承

  // compile with: /target:library
    public class D
    {        
    public virtual void DoWork(int i)
        {            // Original implementation.
        }
    }    
    public abstract class E : D
    {        
    public abstract override void DoWork(int i);
    }   
     public class F : E
    {        
    public override void DoWork(int i)
        {            // New implementation.
        }
    }

若是将 virtual 方法声明为 abstract,则该方法对于从抽象类继承的全部类而言仍然是虚方法。  继承一个抽象方法的类不能访问该方法的原始实现。在上一个示例中,类 F 中的 DoWork 不能调用类 D 中的 DoWork。  经过这种方式,抽象类能够强制派生类为虚方法提供新的方法实现。索引

密封类和类成员事件

经过在类定义前面放置关键字 sealed,能够将类声明为密封类。  例如:get

  public sealed class D
    {        
    // Class members here.
    }

密封类不能用做基类。  所以,它也不能是抽象类。  密封类禁止派生。  因为密封类从不用做基类,因此有些运行时优化能够略微提升密封类成员的调用速度。

在对基类的虚成员进行重写的派生类上,方法、索引器、属性或事件能够将该成员声明为密封成员。  在用于之后的派生类时,这将取消成员的虚效果。  方法是在类成员声明中将 sealed 关键字置于 override 关键字的前面。  例如:

public class D : C
{    
public sealed override void DoWork() { }
}

备注:转自https://msdn.microsoft.com/zh-cn/library/ms173150.aspx

相关文章
相关标签/搜索