c#學習之三:抽象類,密封類和類成員

今天查看了抽象類。

使用 abstract 關鍵字可以創建不完整且必須在派生類中實現的類和成員。

使用 sealed 關鍵字可以防止繼承以前標記爲 virtual 的類或某些類成員。

通過在類定義前面放置關鍵字 abstract,可以將類聲明爲抽象類。例如:

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

抽象類不能實例化。抽象類的用途是提供一個可供多個派生類共享的通用基類定義。例如,類庫可以定義一個抽象類,將其用作多個類庫函數的參數,並要求使用該庫的程序員通過創建派生類來提供自己的類實現。

抽象類也可以定義抽象方法。方法是將關鍵字 abstract 添加到方法的返回類型的前面。例如:

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,可以將類聲明爲密封類。例如:

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

密封類不能用作基類。因此,它也不能是抽象類。密封類禁止派生。由於密封類從不用作基類,所以有些運行時優化可以略微提高密封類成員的調用速度。

在對基類的虛成員進行重寫的派生類上,方法、索引器、屬性或事件可以將該成員聲明爲密封成員。在用於以後的派生類時,這將取消成員的虛效果。方法是在類成員聲明中將 sealed 關鍵字置於 override 關鍵字的前面。例如:

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

上面摘自微軟文檔

下面介紹下怎麼定義抽象屬性

在定義的屬性前面加上 abstract 關鍵字:
public abstract double minNum
{
get;
}

派生類重寫
public override double minNum
{
get
{
return w * h;
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章