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

相關文章
相關標籤/搜索