abstract修飾符可以和類、方法、屬性、索引器及事件一起使用。在類聲明中abstract修飾符以指示某個類只能是其他類的基類。標記為抽象或包含在抽象類別中的成員必須通過從抽象類別派生的類來實現。
抽象類別具有以下特性:抽象類別不能執行個體化;抽象類別可以包含抽象方法和抽象訪問器;不能用sealed修飾符修改抽象類別,因為sealed會使得抽象類別無法被繼承;從抽象類別派生的非抽象類別必須包括繼承的所有抽象方法和抽象訪問器的實實現。
在方法或屬性聲明中使用abstract修飾符以指示方法或屬性不包含實現。抽象方法具有以下特性:抽象方法是隱式的虛方法;只允許在抽象類別中使用抽象方法聲明;因為抽象方法聲明不提供實際的實現,所以沒有方法體,方法什麼只是以一個分號結束,並且在簽名後沒有大括弧({});實現由一個重寫方法override提供,此重寫方法是非抽象類別的一個成員;在抽象方法聲明中使用static或virtual修飾符是錯誤的。
//抽象類別不能是密封的或靜態//abstract sealed class TestClass{}//abstract static class TestClass{}
abstract class BaseClass{ protected int _x=100; protected int _y=150; public abstract void AbstractMethod(); public abstract int X {get;} public abstract int Y {get;} //靜態成員不能標記為abstract //public static abstract void StaticMethod();}class DerivedClass:BaseClass{ public override void AbstractMethod() { _x++; _y++; } public override int X{ get{return _x+10;}} public override int Y{get{return _y+10;}} public static void Main() { DerivedClass c=new DerivedClass(); c.AbstractMethod(); Console.WriteLine("x = {0}, y = {1}", c.X, c.Y); Console.WriteLine(); Console.WriteLine("Press Enter to close this window."); Console.ReadLine(); }}