修饰符:abstract

abstract 修饰符可以和类、方法、属性、索引器及事件一起使用。在类声明中使用 abstract 修饰符以指示某个类只能是其他类的基类。标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。

示例

在此例中,类 Square 必须提供 Area 的实现,因为它派生自 ShapesClass:

C#
abstract class ShapesClass
{
    abstract public int Area();
}
class Square : ShapesClass
{
    int side = 0;

    public Square(int n)
    {
        side = n;
    }
    // Area method is required to avoid
    // a compile-time error.
    public override int Area()
    {
        return side * side;
    }

    static void Main() 
    {
        Square sq = new Square(12);
        Console.WriteLine("Area of the square = {0}", sq.Area());
    }

    interface I
    {
        void M();
    }
    abstract class C : I
    {
        public abstract void M();
    }

}
// Output: Area of the square = 144

本在线速查手册由www.w♡3♡x♡u♡e.com提供,请勿盗用!

抽象类具有以下特性:

在方法或属性声明中使用 abstract 修饰符以指示方法或属性不包含实现。

抽象方法具有以下特性:

除了在声明和调用语法上不同外,抽象属性的行为与抽象方法一样。

有关抽象类的更多信息,请参见抽象类、密封类及类成员(C# 编程指南)

抽象类必须为所有接口成员提供实现。

实现接口的抽象类可以将接口方法映射到抽象方法上。例如:

C#
interface I
{
    void M();
}
abstract class C : I
{
    public abstract void M();
}

本在线速查手册由www.w♡3♡x♡u♡e.com提供,请勿盗用!

在本例中,DerivedClass 类是从抽象类 BaseClass 派生的。抽象类包含一个抽象方法 AbstractMethod 和两个抽象属性 X 和 Y。

C#
abstract class BaseClass   // Abstract class
{
    protected int _x = 100;
    protected int _y = 150;
    public abstract void AbstractMethod();   // Abstract method
    public abstract int X    { get; }
    public abstract int Y    { get; }
}

class DerivedClass : BaseClass
{
    public override void AbstractMethod()
    {
        _x++;
        _y++;
    }

    public override int X   // overriding property
    {
        get
        {
            return _x + 10;
        }
    }

    public override int Y   // overriding property
    {
        get
        {
            return _y + 10;
        }
    }

    static void Main()
    {
        DerivedClass o = new DerivedClass();
        o.AbstractMethod();
        Console.WriteLine("x = {0}, y = {1}", o.X, o.Y);
    }
}
// Output: x = 111, y = 161


本在线速查手册由www.w♡3♡x♡u♡e.com提供,请勿盗用!

在上面的示例中,如果试图通过使用下面的语句将抽象类实例化:

BaseClass bc = new BaseClass();   // Error
本在线速查手册由www.w♡3♡x♡u♡e.com提供,请勿盗用!

将出现错误,指出编译器无法创建抽象类“BaseClass”的实例。