Basic Inheritance
Use class Child : Parent syntax. The derived class inherits all public and protected members. Use base() to call the parent constructor.
Inheritance
Animals.cs
public class Animal
{
public string Name { get; }
public Animal(string name) => Name = name;
public virtual void Speak() => Console.WriteLine($"{Name} makes a sound.");
}
public class Dog : Animal
{
public Dog(string name) : base(name) { }
public override void Speak() => Console.WriteLine($"{Name} barks!");
}
public class Cat : Animal
{
public Cat(string name) : base(name) { }
public override void Speak() => Console.WriteLine($"{Name} meows!");
}
Animal[] pets = { new Dog("Rex"), new Cat("Luna"), new Dog("Buddy") };
foreach (var pet in pets)
pet.Speak();Abstract Classes
An abstract class cannot be instantiated directly. It can contain abstract methods (no body) that derived classes must override.
Abstract class
Shapes.cs
public abstract class Shape
{
public abstract double Area();
public abstract double Perimeter();
public override string ToString()
=> $"{GetType().Name}: Area={Area():F2}, Perimeter={Perimeter():F2}";
}
public class Circle(double radius) : Shape
{
public override double Area() => Math.PI * radius * radius;
public override double Perimeter() => 2 * Math.PI * radius;
}
public class Rectangle(double w, double h) : Shape
{
public override double Area() => w * h;
public override double Perimeter() => 2 * (w + h);
}
Shape[] shapes = { new Circle(5), new Rectangle(4, 6) };
foreach (var s in shapes) Console.WriteLine(s);sealed Classes
Mark a class sealed to prevent further inheritance. Mark a method sealed override to stop derived classes from overriding it further.