C# - Multiple and Multilevel Inheritance

Multiple and Multilevel Inheritance in C# 

Inheritance is one of the fundamental principles of Object-Oriented Programming (OOP). It allows a class to inherit members (methods, properties, fields, events) from another class, promoting code reuse and establishing a natural hierarchical relationship between classes.

In C#, inheritance works a bit differently compared to some other languages like C++ or Java. C# supports multilevel inheritance but does not support multiple inheritance with classes directly. Instead, multiple inheritance-like behavior can be achieved using interfaces.

This article presents detailed notes on multiple inheritance and multilevel inheritance in C#, explaining what they are, how they work, their limitations, workarounds, and practical examples. The notes will also cover key concepts, design considerations, and best practices.

1. Basics of Inheritance in C#

Inheritance enables a new class (derived or child class) to acquire the properties and behaviors of an existing class (base or parent class). The derived class can add new members or override existing ones.

In C#, inheritance is declared using the colon : symbol:

class BaseClass
{
    public void BaseMethod() 
    {
        Console.WriteLine("Base method");
    }
}

class DerivedClass : BaseClass
{
    public void DerivedMethod() 
    {
        Console.WriteLine("Derived method");
    }
}

Here, DerivedClass inherits from BaseClass. An object of DerivedClass can call both BaseMethod() and DerivedMethod().

1.1 Single Inheritance

Single inheritance means a derived class inherits from only one base class. C# fully supports single inheritance.

1.2 Access Modifiers Affecting Inheritance

  • public: Members are accessible anywhere.
  • protected: Members are accessible in the base class and derived classes.
  • private: Members are accessible only within the declaring class (not inherited).
  • internal: Accessible within the same assembly.

Only members marked public or protected are inherited and accessible in derived classes.

2. Multiple Inheritance in C#

Multiple inheritance refers to a class inheriting from more than one base class. For example:

class Base1 { }
class Base2 { }
class Derived : Base1, Base2 { } // Not allowed in C#

This is not allowed in C# when using classes. The language enforces single inheritance for classes to avoid complexities like the "Diamond Problem."

2.1 The Diamond Problem

The diamond problem occurs when a class inherits from two classes that both inherit from the same base class, causing ambiguity about which base class method to call.

For example, if class A is the base class, and classes B and C both inherit from A, and class D inherits from both B and C, then D has two copies of A's members, leading to ambiguity.

C# prevents this ambiguity by not allowing multiple class inheritance.

2.2 Achieving Multiple Inheritance via Interfaces

C# allows a class to implement multiple interfaces, which is a way to achieve multiple inheritance of behavior without inheriting implementation.

Interfaces define only signatures (method declarations without bodies), so a class implementing multiple interfaces must provide the implementation for each.

interface IFlyable
{
    void Fly();
}

interface ISwimmable
{
    void Swim();
}

class Duck : IFlyable, ISwimmable
{
    public void Fly()
    {
        Console.WriteLine("Flying");
    }

    public void Swim()
    {
        Console.WriteLine("Swimming");
    }
}

Here, Duck inherits from two interfaces and implements all required methods, effectively simulating multiple inheritance.

2.3 Key Differences Between Class and Interface Inheritance

  • Classes: Can contain implementation, state (fields), and constructors. C# allows only one base class.
  • Interfaces: Only contain declarations (until default interface implementations introduced in C# 8.0). A class can implement multiple interfaces.

2.4 Default Interface Implementations (C# 8.0+)

Since C# 8.0, interfaces can provide default method implementations, reducing the need for classes to implement all interface methods manually.

interface IExample
{
    void Method1() => Console.WriteLine("Default Method1");
}

Even with default implementations, interfaces do not support fields or constructors, so they do not fully replicate multiple inheritance.

3. Multilevel Inheritance in C#

Multilevel inheritance means a chain of inheritance where a class inherits from a derived class, which itself inherits from another class.

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

class Mammal : Animal
{
    public void Walk()
    {
        Console.WriteLine("Walking...");
    }
}

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

Here, Dog inherits from Mammal, which inherits from Animal. Thus, Dog has access to Bark(), Walk(), and Eat().

3.1 How Multilevel Inheritance Works

  • The Dog class is a subclass of Mammal.
  • Mammal is a subclass of Animal.
  • When an object of Dog is created, it inherits members from both Mammal and Animal.

3.2 Advantages of Multilevel Inheritance

  • Reusability: Derived classes reuse functionality defined in base and intermediate classes.
  • Extensibility: New classes can extend existing hierarchies easily.
  • Logical Hierarchy: Models real-world hierarchical relationships.

3.3 Method Overriding in Multilevel Inheritance

Derived classes can override virtual methods from base classes to provide specialized behavior:

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

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

class Puppy : Dog
{
    public override void Sound()
    {
        Console.WriteLine("Soft bark");
    }
}

Here, Puppy overrides the Sound() method, shadowing Dog's implementation, which shadows Animal's.

4. Hybrid Inheritance in C# Using Interfaces and Classes

Hybrid inheritance combines multilevel inheritance with multiple inheritance of interfaces.

interface IFlyable
{
    void Fly();
}

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

class Bird : Animal, IFlyable
{
    public void Fly() { Console.WriteLine("Flying"); }
}

class Eagle : Bird
{
    public void Hunt() { Console.WriteLine("Hunting"); }
}

Here, Eagle inherits from Bird (multilevel inheritance) and Bird implements IFlyable (multiple inheritance from interfaces). This model leverages the power of both inheritance types.

5. Limitations and Design Considerations

5.1 Why C# Does Not Support Multiple Class Inheritance

  • Complexity: Multiple inheritance can cause ambiguity and increase complexity.
  • Diamond Problem: Multiple base classes may have members with the same signature.
  • Language Simplicity and Safety: Avoiding multiple inheritance makes the language simpler and safer.

5.2 Interfaces as a Preferred Approach

Interfaces provide a flexible and clean way to implement multiple behaviors without inheritance pitfalls. They also promote loose coupling and adherence to SOLID principles.

5.3 Composition Over Inheritance

Favor composition (having objects of other types as fields) over inheritance to promote better code reuse and maintainability.

5.4 Virtual, Override, and New Keywords

  • virtual: Marks a method as overridable.
  • override: Overrides a base class virtual method.
  • new: Hides a base class method without overriding.

Use these keywords correctly to control method behavior in inheritance hierarchies.

6. Practical Examples

6.1 Multilevel Inheritance Example

using System;

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

class Car : Vehicle
{
    public void Drive()
    {
        Console.WriteLine("Car is driving");
    }
}

class SportsCar : Car
{
    public void TurboBoost()
    {
        Console.WriteLine("Turbo boost activated!");
    }
}

class Program
{
    static void Main()
    {
        SportsCar sc = new SportsCar();
        sc.Start();      // Inherited from Vehicle
        sc.Drive();      // Inherited from Car
        sc.TurboBoost(); // Defined in SportsCar
    }
}

6.2 Multiple Interface Implementation

using System;

interface IWorker
{
    void Work();
}

interface IManager
{
    void Manage();
}

class Employee : IWorker, IManager
{
    public void Work()
    {
        Console.WriteLine("Working...");
    }

    public void Manage()
    {
        Console.WriteLine("Managing...");
    }
}

class Program
{
    static void Main()
    {
        Employee emp = new Employee();
        emp.Work();
        emp.Manage();
    }
}
  • C# supports single inheritance for classes and multiple inheritance for interfaces.
  • Multilevel inheritance allows inheritance chains and is fully supported in C#.
  • Multiple inheritance for classes is disallowed to avoid complexity and ambiguity.
  • Use interfaces to achieve multiple inheritance-like behavior.
  • Leverage virtual, override, and new keywords for polymorphism and method hiding.
  • Prefer composition and interface implementation for flexible, maintainable code.

Mastering these inheritance concepts is crucial for designing scalable, extensible, and maintainable object-oriented applications in C#.

logo

C#

Beginner 5 Hours

Multiple and Multilevel Inheritance in C# 

Inheritance is one of the fundamental principles of Object-Oriented Programming (OOP). It allows a class to inherit members (methods, properties, fields, events) from another class, promoting code reuse and establishing a natural hierarchical relationship between classes.

In C#, inheritance works a bit differently compared to some other languages like C++ or Java. C# supports multilevel inheritance but does not support multiple inheritance with classes directly. Instead, multiple inheritance-like behavior can be achieved using interfaces.

This article presents detailed notes on multiple inheritance and multilevel inheritance in C#, explaining what they are, how they work, their limitations, workarounds, and practical examples. The notes will also cover key concepts, design considerations, and best practices.

1. Basics of Inheritance in C#

Inheritance enables a new class (derived or child class) to acquire the properties and behaviors of an existing class (base or parent class). The derived class can add new members or override existing ones.

In C#, inheritance is declared using the colon : symbol:

class BaseClass { public void BaseMethod() { Console.WriteLine("Base method"); } } class DerivedClass : BaseClass { public void DerivedMethod() { Console.WriteLine("Derived method"); } }

Here, DerivedClass inherits from BaseClass. An object of DerivedClass can call both BaseMethod() and DerivedMethod().

1.1 Single Inheritance

Single inheritance means a derived class inherits from only one base class. C# fully supports single inheritance.

1.2 Access Modifiers Affecting Inheritance

  • public: Members are accessible anywhere.
  • protected: Members are accessible in the base class and derived classes.
  • private: Members are accessible only within the declaring class (not inherited).
  • internal: Accessible within the same assembly.

Only members marked public or protected are inherited and accessible in derived classes.

2. Multiple Inheritance in C#

Multiple inheritance refers to a class inheriting from more than one base class. For example:

class Base1 { } class Base2 { } class Derived : Base1, Base2 { } // Not allowed in C#

This is not allowed in C# when using classes. The language enforces single inheritance for classes to avoid complexities like the "Diamond Problem."

2.1 The Diamond Problem

The diamond problem occurs when a class inherits from two classes that both inherit from the same base class, causing ambiguity about which base class method to call.

For example, if class A is the base class, and classes B and C both inherit from A, and class D inherits from both B and C, then D has two copies of A's members, leading to ambiguity.

C# prevents this ambiguity by not allowing multiple class inheritance.

2.2 Achieving Multiple Inheritance via Interfaces

C# allows a class to implement multiple interfaces, which is a way to achieve multiple inheritance of behavior without inheriting implementation.

Interfaces define only signatures (method declarations without bodies), so a class implementing multiple interfaces must provide the implementation for each.

interface IFlyable { void Fly(); } interface ISwimmable { void Swim(); } class Duck : IFlyable, ISwimmable { public void Fly() { Console.WriteLine("Flying"); } public void Swim() { Console.WriteLine("Swimming"); } }

Here, Duck inherits from two interfaces and implements all required methods, effectively simulating multiple inheritance.

2.3 Key Differences Between Class and Interface Inheritance

  • Classes: Can contain implementation, state (fields), and constructors. C# allows only one base class.
  • Interfaces: Only contain declarations (until default interface implementations introduced in C# 8.0). A class can implement multiple interfaces.

2.4 Default Interface Implementations (C# 8.0+)

Since C# 8.0, interfaces can provide default method implementations, reducing the need for classes to implement all interface methods manually.

interface IExample { void Method1() => Console.WriteLine("Default Method1"); }

Even with default implementations, interfaces do not support fields or constructors, so they do not fully replicate multiple inheritance.

3. Multilevel Inheritance in C#

Multilevel inheritance means a chain of inheritance where a class inherits from a derived class, which itself inherits from another class.

class Animal { public void Eat() { Console.WriteLine("Eating..."); } } class Mammal : Animal { public void Walk() { Console.WriteLine("Walking..."); } } class Dog : Mammal { public void Bark() { Console.WriteLine("Barking..."); } }

Here, Dog inherits from Mammal, which inherits from Animal. Thus, Dog has access to Bark(), Walk(), and Eat().

3.1 How Multilevel Inheritance Works

  • The Dog class is a subclass of Mammal.
  • Mammal is a subclass of Animal.
  • When an object of Dog is created, it inherits members from both Mammal and Animal.

3.2 Advantages of Multilevel Inheritance

  • Reusability: Derived classes reuse functionality defined in base and intermediate classes.
  • Extensibility: New classes can extend existing hierarchies easily.
  • Logical Hierarchy: Models real-world hierarchical relationships.

3.3 Method Overriding in Multilevel Inheritance

Derived classes can override virtual methods from base classes to provide specialized behavior:

class Animal { public virtual void Sound() { Console.WriteLine("Animal sound"); } } class Dog : Animal { public override void Sound() { Console.WriteLine("Bark"); } } class Puppy : Dog { public override void Sound() { Console.WriteLine("Soft bark"); } }

Here, Puppy overrides the Sound() method, shadowing Dog's implementation, which shadows Animal's.

4. Hybrid Inheritance in C# Using Interfaces and Classes

Hybrid inheritance combines multilevel inheritance with multiple inheritance of interfaces.

interface IFlyable { void Fly(); } class Animal { public void Eat() { Console.WriteLine("Eating"); } } class Bird : Animal, IFlyable { public void Fly() { Console.WriteLine("Flying"); } } class Eagle : Bird { public void Hunt() { Console.WriteLine("Hunting"); } }

Here, Eagle inherits from Bird (multilevel inheritance) and Bird implements IFlyable (multiple inheritance from interfaces). This model leverages the power of both inheritance types.

5. Limitations and Design Considerations

5.1 Why C# Does Not Support Multiple Class Inheritance

  • Complexity: Multiple inheritance can cause ambiguity and increase complexity.
  • Diamond Problem: Multiple base classes may have members with the same signature.
  • Language Simplicity and Safety: Avoiding multiple inheritance makes the language simpler and safer.

5.2 Interfaces as a Preferred Approach

Interfaces provide a flexible and clean way to implement multiple behaviors without inheritance pitfalls. They also promote loose coupling and adherence to SOLID principles.

5.3 Composition Over Inheritance

Favor composition (having objects of other types as fields) over inheritance to promote better code reuse and maintainability.

5.4 Virtual, Override, and New Keywords

  • virtual: Marks a method as overridable.
  • override: Overrides a base class virtual method.
  • new: Hides a base class method without overriding.

Use these keywords correctly to control method behavior in inheritance hierarchies.

6. Practical Examples

6.1 Multilevel Inheritance Example

using System; class Vehicle { public void Start() { Console.WriteLine("Vehicle started"); } } class Car : Vehicle { public void Drive() { Console.WriteLine("Car is driving"); } } class SportsCar : Car { public void TurboBoost() { Console.WriteLine("Turbo boost activated!"); } } class Program { static void Main() { SportsCar sc = new SportsCar(); sc.Start(); // Inherited from Vehicle sc.Drive(); // Inherited from Car sc.TurboBoost(); // Defined in SportsCar } }

6.2 Multiple Interface Implementation

using System; interface IWorker { void Work(); } interface IManager { void Manage(); } class Employee : IWorker, IManager { public void Work() { Console.WriteLine("Working..."); } public void Manage() { Console.WriteLine("Managing..."); } } class Program { static void Main() { Employee emp = new Employee(); emp.Work(); emp.Manage(); } }
  • C# supports single inheritance for classes and multiple inheritance for interfaces.
  • Multilevel inheritance allows inheritance chains and is fully supported in C#.
  • Multiple inheritance for classes is disallowed to avoid complexity and ambiguity.
  • Use interfaces to achieve multiple inheritance-like behavior.
  • Leverage virtual, override, and new keywords for polymorphism and method hiding.
  • Prefer composition and interface implementation for flexible, maintainable code.

Mastering these inheritance concepts is crucial for designing scalable, extensible, and maintainable object-oriented applications in C#.

Related Tutorials

Frequently Asked Questions for C#

C# is much easier to learn than C++. C# is a simpler, high-level-of-abstraction language, while C++ is a low-level language with a higher learning curve.

C# outshines Python when it comes to runtime performance. As a compiled language, C# code is converted to machine code, which can be executed more efficiently by the processor. This results in faster execution times and better performance, especially in resource-intensive tasks.

Python and JavaScript programmers also earn high salaries, ranking #3 and #4 in compensation. 
C# is the highest-paid programming language but has less demand than Python, JavaScript, and Java.

No. Microsoft has invested substantially in ensuring that C# is the dominant language today, spending two billion dollars on marketing and attempting to convince developers to embrace this new platform, which is also based on the.NET foundation.

C# is primarily used on the Windows .NET framework, although it can be applied to an open source platform. This highly versatile programming language is an object-oriented programming language (OOP) and comparably new to the game, yet a reliable crowd pleaser.


You can’t be able to become Master of C# in 3 months since it has many concepts to learn and implement. NOTE: no one can become master in particular programming language. Everyday they introducing new concepts we need to get practice on it which practically somewhat tough.

C-Sharp is one of the most widely used languages for creating system backend.It's because of its incredible features, such as Windows server automation. Apart from that, it's fantastic because it runs codes quite quickly. It can also be used to create CLI applications and game creation.

Easy to learn and use: C# is simpler than Java due to its use of fewer keywords and usually shorter lines of code. Hence, it is easier to learn to code in C# compared to Java. Flexible Data Types: C# provides more flexibility in defining data types than Java.

Four steps of code compilation in C# include : 
  • Source code compilation in managed code.
  • Newly created code is clubbed with assembly code.
  • The Common Language Runtime (CLR) is loaded.
  • Assembly execution is done through CLR.

The C# language is also easy to learn because by learning a small subset of the language you can immediately start to write useful code. More advanced features can be learnt as you become more proficient, but you are not forced to learn them to get up and running. C# is very good at encapsulating complexity.


The decision to opt for C# or Node. js largely hinges on the specific requirements of your project. If you're developing a CPU-intensive, enterprise-level application where stability and comprehensive tooling are crucial, C# might be your best bet.


Among other languages, C# is gaining huge popularity for developing web-based applications. Its core concepts help build an interactive environment and provide functionalities that the dynamic web platform requires. Most aspiring full-stack developers choose this versatile language.

The C# programming language was designed by Anders Hejlsberg from Microsoft in 2000 and was later approved as an international standard by Ecma (ECMA-334) in 2002 and ISO/IEC (ISO/IEC 23270 and 20619) in 2003. Microsoft introduced C# along with .NET Framework and Visual Studio, both of which were closed-source. 

C# outshines Python when it comes to runtime performance. As a compiled language, C# code is converted to machine code, which can be executed more efficiently by the processor. This results in faster execution times and better performance, especially in resource-intensive tasks.

Yes, C# is used by many large organizations, start-ups and beginners alike. It takes some of the useful features of C and adds syntax to save time and effort. Although C# is based on C, you can learn it without any knowledge of C β€” in fact, this course is perfect for those with no coding experience at all!

C# is a very mature language that evolved significantly over the years.
The C# language is one of the top 5 most popular programming languages and .NET is the most loved software development framework in the world.
TIOBE Index predicts C# as 2023 'Language of the Year' close to overtake Java in popularity.

Generally, the C# language is not limited to the Windows operating system. In a sense, however, it is limited to Microsoft software. C# language "belongs" to Microsoft, it is developed by Microsoft and it is Microsoft that provides the runtime environment required for the operation of programs written in C#.

C# (pronounced "C sharp") is called so because the "#" symbol is often referred to as "sharp." The name was chosen by Microsoft when they developed the language. It's a play on words related to musical notation where "C#" represents the musical note C sharp.

Dennis MacAlistair Ritchie (September 9, 1941 – c. October 12, 2011) was an American computer scientist. He created the C programming language and, with long-time colleague Ken Thompson, the Unix operating system and B language.

C# is part of .NET, a free and open source development platform for building apps that run on Windows, macOS, Linux, iOS, and Android. There's an active community answering questions, producing samples, writing tutorials, authoring books, and more.


line

Copyrights © 2024 letsupdateskills All rights reserved