1.抽象類和類成員
使用 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。在此情況下,抽象類可以強制派生類為虛方法提供新的方法實現。
2.密封類和類成員
使用 sealed 關鍵字可以防止繼承以前標記為 virtual 的類或某些類成員。
例如:
public sealed class D
{
// Class members here.
}
密封類不能用作基類。因此,它也不能是抽象類。密封類禁止派生。由於密封類從不用作基類,所以有些運行時優化可以使對密封類成員的調用略快。
在對基類的虛成員進行重寫的派生類上的類成員、方法、字段、屬性或事件可以將該成員聲明為密封成員。在用於以後的派生類時,這將取消成員的虛效果。方法是在類成員聲明中將 sealed 關鍵字置於 override 關鍵字的前面。例如:
public class D : C
{
public sealed override void DoWork() { }
}
請參考:http://msdn.microsoft.com/zh-cn/library/kx37x362.aspx
寵辱不驚,閒看庭前花開花落;去留無意,漫隨天外雲卷雲舒。