9. Abstract Method, Virtual Method

Abstract Classes and Methods in C#

What is an Abstract Class?

An abstract class is a class that cannot be instantiated directly. It serves as a blueprint for derived classes, possibly containing incomplete methods (i.e., abstract methods) that must be implemented by its subclasses. You typically mark a class abstract when you want to enforce certain method signatures without providing a default implementation.

Key Points

Abstract Methods

Example

public abstract class Shape
{
    public abstract double GetArea(); // no body
    public abstract double GetPerimeter();
}

public class Circle : Shape
{
    private double _radius;
    public Circle(double radius) => _radius = radius;

    // Must override abstract methods
    public override double GetArea() => Math.PI * _radius * _radius;
    public override double GetPerimeter() => 2 * Math.PI * _radius;
}

Here, Shape is an abstract class with abstract methods GetArea() and GetPerimeter(). Any derived class (e.g., Circle) must override these methods with actual implementations.

Virtual vs. Abstract Methods

Polymorphism via Abstract Classes

When a derived class overrides abstract methods, you achieve polymorphism. You can refer to derived objects by their abstract base type and rely on the overridden methods at runtime:

Shape shape = new Circle(5.0);
Console.WriteLine($"Area: {shape.GetArea()}");       // Circle's implementation
Console.WriteLine($"Perimeter: {shape.GetPerimeter()}");

When to Use an Abstract Class

Virtual Methods

Example

public class BasePrinter
{
    public virtual void Print()
    {
        Console.WriteLine("Base printer output");
    }
}

public class FancyPrinter : BasePrinter
{
    public override void Print()
    {
        Console.WriteLine("Fancy printer output with colors");
    }
}

In this scenario, Print() has a default implementation in BasePrinter, but FancyPrinter chooses to override it.

Reference

The content in this document is based on the original notes provided in Azerbaijani. For further details, you can refer to the original document using the following link:

Original Note - Azerbaijani Version