C# Exception Handling
C# File I/O
C# Delegates and Events
C# Generics
C# Async Programming
C# Inheritance

C# Inheritance

Inheritance lets a derived class reuse members from a base class, adding or overriding behaviour as needed.

1 - Basic Inheritance

public class Animal
{
    public string Name { get; }
    public Animal(string name) => Name = name;

    public virtual string Speak() => $"{Name} makes a sound.";
}

public class Dog : Animal
{
    public Dog(string name) : base(name) { }
    public override string Speak() => $"{Name} barks!";
}

public class Cat : Animal
{
    public Cat(string name) : base(name) { }
    public override string Speak() => $"{Name} meows!";
}

Animal[] animals = { new Dog("Rex"), new Cat("Whiskers") };
foreach (var a in animals)
    Console.WriteLine(a.Speak());
// Rex barks!
// Whiskers meows!

2 - base Keyword

public class Vehicle
{
    public string Brand { get; }
    public Vehicle(string brand) => Brand = brand;
    public virtual string Info() => $"Brand: {Brand}";
}

public class ElectricCar : Vehicle
{
    public int Range { get; }
    public ElectricCar(string brand, int range) : base(brand) => Range = range;
    public override string Info() => $"{base.Info()} | Range: {Range} km";
}

var ev = new ElectricCar("Tesla", 500);
Console.WriteLine(ev.Info()); // Brand: Tesla | Range: 500 km

3 - Sealed Classes and Methods

public sealed class FinalClass { }   // cannot be inherited

public class Base
{
    public virtual void Run() { }
}
public class Derived : Base
{
    public sealed override void Run() { } // no further overriding
}

Note: C# supports single inheritance for classes. To share behaviour from multiple sources, use interfaces and composition. Prefer composition over deep inheritance hierarchies — they become hard to understand and maintain.

-Tip-