Inheritance is a fundamental concept in object-oriented programming that allows us to define a new class based on an existing class. The new class inherits the properties and methods of the existing class and can also add new properties and methods of its own. Inheritance promotes code reuse, simplifies code maintenance, and improves code organization.

In C#, there are several types of inheritance:

In C#, there are 4 types of inheritance:

  1. Single inheritance: A derived class that inherits from only one base class.
  2. Multi-level inheritance: A derived class that inherits from a base class and the derived class itself becomes the base class for another derived class.
  3. Hierarchical inheritance: A base class that serves as a parent class for two or more derived classes.
  4. Multiple inheritance: A derived class that inherits from two or more base classes.

Here’s an example code that demonstrates each type of inheritance:

using System;
 
// single inheritance
class Animal {
    public void Eat() {
        Console.WriteLine("Animal is eating.");
    }
}
 
class Dog : Animal {
    public void Bark() {
        Console.WriteLine("Dog is barking.");
    }
}
 
// multi-level inheritance
class Mammal : Animal {
    public void Run() {
        Console.WriteLine("Mammal is running.");
    }
}
 
class Horse : Mammal {
    public void Gallop() {
        Console.WriteLine("Horse is galloping.");
    }
}
 
// hierarchical inheritance
class Bird : Animal {
    public void Fly() {
        Console.WriteLine("Bird is flying.");
    }
}
 
class Eagle : Bird {
    public void Hunt() {
        Console.WriteLine("Eagle is hunting.");
    }
}
 
class Penguin : Bird {
    public void Swim() {
        Console.WriteLine("Penguin is swimming.");
    }
}
 
// multiple inheritance
interface I1 {
    void Method1();
}
 
interface I2 {
    void Method2();
}
 
class MyClass : I1, I2 {
    public void Method1() {
        Console.WriteLine("Method1 is called.");
    }
 
    public void Method2() {
        Console.WriteLine("Method2 is called.");
    }
}
 
// main program
class Program {
    static void Main(string[] args) {
        // single inheritance
        Dog dog = new Dog();
        dog.Eat();
        dog.Bark();
 
        // multi-level inheritance
        Horse horse = new Horse();
        horse.Eat();
        horse.Run();
        horse.Gallop();
 
        // hierarchical inheritance
        Eagle eagle = new Eagle();
        Penguin penguin = new Penguin();
        eagle.Fly();
        eagle.Hunt();
        penguin.Fly();
        penguin.Swim();
 
        // multiple inheritance
        MyClass myClass = new MyClass();
        myClass.Method1();
        myClass.Method2();
 
        Console.ReadLine();
    }
}

Output

Animal is eating.
Dog is barking.
Animal is eating.
Mammal is running.
Horse is galloping.
Bird is flying.
Eagle is hunting.
Bird is flying.
Penguin is swimming.
Method1 is called.
Method2 is called.

Advantages of Inheritance:

  1. Code Reusability: Inheritance allows us to reuse existing code by inheriting properties and methods from an existing class.
  2. Code Maintenance: Inheritance makes code maintenance easier by allowing us to modify the base class and have the changes automatically reflected in the derived classes.
  3. Code Organization: Inheritance improves code organization by grouping related classes together in a hierarchical structure.

Disadvantages of Inheritance:

  1. Tight Coupling: Inheritance creates a tight coupling between the base class and the derived class, which can make the code more difficult to maintain.
  2. Complexity: Inheritance can increase the complexity of the code by introducing additional levels of abstraction.
  3. Fragility: Inheritance can make the code more fragile by creating dependencies between the base class and the derived class.

Reference book:

Here are some recommended books for learning about inheritance in C#:

  1. “C# 9.0 in a Nutshell” by Joseph Albahari and Ben Albahari: This book provides a comprehensive guide to C# 9.0, including inheritance, interfaces, and other object-oriented programming concepts.
  2. “Head First C#” by Jennifer Greene and Andrew Stellman: This book is a beginner-friendly introduction to C#, including inheritance and other object-oriented programming concepts.
  3. “Professional C# 7 and .NET Core 2.0” by Christian Nagel: This book is a comprehensive guide to C# 7 and .NET Core 2.0, including inheritance, polymorphism, and other object-oriented programming concepts.

These books are great resources for both beginners and experienced developers who want to learn more about inheritance in C#.

Inheritance is an important pillar of OOP(Object Oriented Programming). It is the mechanism in C# by which one class is allowed to inherit the features(fields and methods) of another class. Important terminology:

  • Super Class: The class whose features are inherited is known as super class(or a base class or a parent class).
  • Sub Class: The class that inherits the other class is known as subclass(or a derived class, extended class, or child class). The subclass can add its own fields and methods in addition to the superclass fields and methods.
  • Reusability: Inheritance supports the concept of “reusability”, i.e. when we want to create a new class and there is already a class that includes some of the code that we want, we can derive our new class from the existing class. By doing this, we are reusing the fields and methods of the existing class.

How to use inheritance

The symbol used for inheritance is :Syntax:

class derived-class : base-class  
{  
   // methods and fields  
   .
   .
}

Example: In below example of inheritance, class CCG is a base class, class CodeConfig is a derived class which extends CCG class and class Sudo is a driver class to run program. 

// C# program to illustrate the
// concept of inheritance
using System;
namespace ConsoleApplication1 {
 
// Base class
class CCG {
  
   // data members
    public string name;
    public string subject;
 
    // public method of base class
    public void readers(string name, string subject)
    {
        this.name = name;
        this.subject = subject;
        Console.WriteLine("Myself: " + name);
        Console.WriteLine("My Favorite Subject is: " + subject);
    }
}
 
// inheriting the CCG class using :
class CodeConfig : CCG{
  
    // constructor of derived class
    public CodeConfig()
    {
        Console.WriteLine("CodeConfig");
    }
}
  
// Driver class
class Sudo {
 
    // Main Method
    static void Main(string[] args)
    {
  
        // creating object of derived class
        CodeConfig g = new CodeConfig();
 
        // calling the method of base class
        // using the derived class object
        g.readers("Aman", "C#.Net");
    }
}
}

Output:

CodeConfig
Myself: Aman
My Favorite Subject is: C#.Net

Types of Inheritance in C#

Below are the different types of inheritance which is supported by C# in different combinations.

Single Inheritance:

 In single inheritance, subclasses inherit the features of one superclass. In image below, the class A serves as a base class for the derived class B. 

C# | Inheritance

Multilevel Inheritance:

 In Multilevel Inheritance, a derived class will be inheriting a base class and as well as the derived class also act as the base class to other class. In below image, class A serves as a base class for the derived class B, which in turn serves as a base class for the derived class C. 

C# | Inheritance

Hierarchical Inheritance:

 In Hierarchical Inheritance, one class serves as a superclass (base class) for more than one subclass. In below image, class A serves as a base class for the derived class B, C, and D.

Multiple Inheritance (Through Interfaces):

In Multiple inheritance, one class can have more than one superclass and inherit features from all parent classes. Please note that C# does not support multiple inheritance with classes. In C#, we can achieve multiple inheritance only through Interfaces. In the image below, Class C is derived from interface A and B. 

C# | Inheritance

Hybrid Inheritance (Through Interfaces): 

It is a mix of two or more of the above types of inheritance. Since C# doesn’t support multiple inheritance with classes, the hybrid inheritance is also not possible with classes. In C#, we can achieve hybrid inheritance only through Interfaces. 

C# | Inheritance

Important facts about inheritance in C#

  • Default Superclass: Except Object class, which has no superclass, every class has one and only one direct superclass(single inheritance). In the absence of any other explicit superclass, every class is implicitly a subclass of Object class.
  • Superclass can only be one: A superclass can have any number of subclasses. But a subclass can have only one superclass. This is because C# does not support multiple inheritance with classes. Although with interfaces, multiple inheritance is supported by C#.
  • Inheriting Constructors: A subclass inherits all the members (fields, methods) from its superclass. Constructors are not members, so they are not inherited by subclasses, but the constructor of the superclass can be invoked from the subclass.
  • Private member inheritance: A subclass does not inherit the private members of its parent class. However, if the superclass has properties(get and set methods) for accessing its private fields, then a subclass can inherit.

I hope you enjoyed reading this post. For more information you can check out Microsoft learn.

For more information you can visit our C# Section for more such posts.

Explore More

Working With File Class In C#

In C#, ‘File’ class provides many static methods for moving, copying, and deleting files. These Static methods involve moving a file and copying and deleting a file also. Let’s check

How to Read a Text File in C#

In C# ‘File’ class provides static methods to read given text file data. The File.ReadAllText() method opens a text file, reads all the text present in the file into a

C# | How to use Interface references

In C#, you’re permitted to make a reference variable of an interface type or in other words, you’re permitted to form an interface reference variable. Such kind of variable can