C# 关于抽象类 Abstract class

发布于 2023-07-01  119 次阅读


抽象类是一个通用的基类

当我们需要定义一个通用的基类,但又不希望直接创建该类的实例时,可以使用抽象类。抽象类是用于被继承而不是直接实例化的类,它可以包含抽象成员和具体实现的成员。

以下是一个关于抽象类的

示例

abstract class Shape
{
    public abstract double CalculateArea(); // 抽象方法,需要在派生类中实现

    public void Display()
    {
        Console.WriteLine("Displaying shape."); // 具体实现的方法
    }
}

class Circle : Shape
{
    private double radius;

    public Circle(double radius)
    {
        this.radius = radius;
    }

    public override double CalculateArea()
    {
        return Math.PI * radius * radius; // 实现抽象方法
    }
}

class Rectangle : Shape
{
    private double length;
    private double width;

    public Rectangle(double length, double width)
    {
        this.length = length;
        this.width = width;
    }

    public override double CalculateArea()
    {
        return length * width; // 实现抽象方法
    }
}

class Program
{
    static void Main(string[] args)
    {
        Shape circle = new Circle(5);
        double circleArea = circle.CalculateArea(); // 调用抽象方法
        Console.WriteLine("Circle Area: " + circleArea);

        Shape rectangle = new Rectangle(4, 6);
        double rectangleArea = rectangle.CalculateArea(); // 调用抽象方法
        Console.WriteLine("Rectangle Area: " + rectangleArea);

        circle.Display(); // 调用具体方法
        rectangle.Display(); // 调用具体方法

        // Shape shape = new Shape(); // 无法直接实例化抽象类

        // Output:
        // Circle Area: 78.53981633974483
        // Rectangle Area: 24
        // Displaying shape.
        // Displaying shape.
    }
}


在上述示例中,Shape 是一个抽象类,它定义了一个抽象方法 CalculateArea() 和一个具体方法 Display()。
Circle 和 Rectangle 是派生自 Shape 的具体类,它们实现了抽象方法 CalculateArea()。

在 Main 方法中,我们创建了 Circle 和 Rectangle 的实例,并调用了它们的 CalculateArea() 方法和基类的 Display() 方法。

需要注意的是,抽象类无法直接实例化,只能通过派生类创建实例。

抽象类提供了一种模板和约束,让派生类必须实现抽象方法,从而实现多态性和代码的灵活性。

是不是挺好呀~