Understanding C# Inheritance

Inheritance in C# is a fundamental concept of object-oriented programming that allows a class to inherit members (fields, methods, properties) from another class. The class that inherits is called the derived class, and the class being inherited from is called the base class.

Key Topics

Basic Inheritance

To inherit from a class, use the colon : followed by the base class name.

Example: Implementing Inheritance

public class Animal
{
    public void Eat()
    {
        Console.WriteLine("Eating...");
    }
}

public class Dog : Animal
{
    public void Bark()
    {
        Console.WriteLine("Barking...");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Dog dog = new Dog();
        dog.Eat(); // Inherited method
        dog.Bark();
    }
}

Output:

Eating...
Barking...
                    

Explanation: The Dog class inherits from Animal, gaining access to its Eat() method.

Overriding Methods

You can override methods in the base class using the virtual and override keywords.

Example: Overriding a Method

public class Animal
{
    public virtual void MakeSound()
    {
        Console.WriteLine("Animal sound");
    }
}

public class Cat : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Meow");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Animal myAnimal = new Animal();
        Animal myCat = new Cat();
        myAnimal.MakeSound(); // Outputs "Animal sound"
        myCat.MakeSound();    // Outputs "Meow"
    }
}

Output:

Animal sound
Meow
                    

Explanation: The Cat class overrides the MakeSound() method of the base class Animal.

Using the base Keyword

The base keyword is used to access members of the base class from within a derived class.

Example: Calling Base Class Methods

public class Vehicle
{
    public virtual void Start()
    {
        Console.WriteLine("Vehicle starting...");
    }
}

public class Car : Vehicle
{
    public override void Start()
    {
        base.Start(); // Calls the base class method
        Console.WriteLine("Car started.");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Car car = new Car();
        car.Start();
    }
}

Output:

Vehicle starting...
Car started.
                    

Explanation: The Car class overrides the Start() method but also calls the base class implementation using base.Start().

Sealed Classes and Methods

The sealed keyword prevents a class from being inherited or a method from being overridden.

Example: Using Sealed Methods

public class A
{
    public virtual void Display()
    {
        Console.WriteLine("Class A");
    }
}

public class B : A
{
    public sealed override void Display()
    {
        Console.WriteLine("Class B");
    }
}

public class C : B
{
    // Cannot override Display() because it is sealed in class B
}

class Program
{
    static void Main(string[] args)
    {
        C obj = new C();
        obj.Display(); // Outputs "Class B"
    }
}

Output:

Class B
                    

Explanation: The Display() method in class B is sealed, so it cannot be overridden in class C. When we call obj.Display(), it uses the implementation from class B.

Key Takeaways

  • Inheritance allows a derived class to inherit members from a base class.
  • Use the virtual keyword to allow a method to be overridden.
  • Use the override keyword to override a base class method.
  • The base keyword accesses base class members from derived classes.
  • The sealed keyword prevents further inheritance or overriding.