Method Overloading And Overriding In C# Complete Guide

 Last Update:2025-06-23T00:00:00     .NET School AI Teacher - SELECT ANY TEXT TO EXPLANATION.    7 mins read      Difficulty-Level: beginner

Understanding the Core Concepts of Method Overloading and Overriding in C#

Method Overloading in C#

Definition: Method overloading allows multiple methods in the same class to have the same name but different parameters (different type, different number, or both). This enables a method to perform similar actions in different ways without having to create multiple methods with different names.

Purpose:

  • Readability and Maintainability: By having methods with the same name, overloading makes the code more intuitive and easier to understand.
  • Code Reusability: It promotes reusability by allowing a method to handle various types of data without rewriting the entire method.

Rules for Method Overloading:

  • Overloaded methods must have different parameters (either different type or number of parameters).
  • Return type alone is not sufficient for method overloading; the method signature (name + parameters) must be different.
  • Accessibility modifiers (like public, private, etc.) have no impact on overloading; only parameter lists do.

Example of Method Overloading

public class Calculator {
    public int Add(int a, int b) {
        return a + b;
    }
    public double Add(double a, double b) {
        return a + b;
    }
    public int Add(int a, int b, int c) {
        return a + b + c;
    }
}

In this example, Add method is overloaded three times to handle different parameters and types.

Method Overriding in C#

Definition: Method overriding allows a derived class to provide a specific implementation of a method that is already provided by its base class. The base class method must be marked as virtual, and the derived class method must use the override keyword.

Purpose:

  • Polymorphism: Overriding enables a method to be treated differently in different classes, which allows for more flexible and dynamic code.
  • Runtime Polymorphism: It is an example of runtime polymorphism where the method to be executed is determined at runtime, not at compile time.

Rules for Method Overriding:

  • The base class method must be marked with the virtual keyword.
  • The derived class method must be marked with the override keyword.
  • The signature of the overridden method (name and parameters) must match exactly with the base class method.
  • The return type of the overridden method must be the same or a co-variant return type (in .NET Framework 4.0 and later and .NET Core).

Example of Method Overriding

public class Animal {
    public virtual void Speak() {
        Console.WriteLine("Animal makes a sound");
    }
}

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

In the above example, the Dog class overrides the Speak method that was defined in the Animal base class.

Important Information

  1. Method Overloading vs Overriding:

    • Method Overloading is used within the same class. Multiple methods with the same name but different parameters.
    • Method Overriding is used in derived classes to provide a specific implementation of a method that already exists in the base class.
  2. Key Keywords:

    • virtual: Declares that a method can be overridden in a derived class.
    • override: Declares that a method overrides an abstract or virtual method from the base class.
    • sealed: Prevents further overriding of a method in derived classes (can be used with override).
  3. Benefits and Use Cases:

    • Overloading: Provides a way to write flexible and reusable code with intuitive method names.
    • Overriding: Facilitates polymorphism, allowing methods to behave differently based on the object type.
  4. Scenarios where Overloading/Overriding are useful:

    • Overloading: Useful for creating methods that perform similar operations but on different data types or parameters.
    • Overriding: Useful when you have a method in the base class and want to provide a specialized version of that method in derived classes.

Online Code run

🔔 Note: Select your programming language to check or run code at

💻 Run Code Compiler

Step-by-Step Guide: How to Implement Method Overloading and Overriding in C#

Method Overloading

Method overloading allows multiple methods in the same class to have the same name, as long as their parameter lists are different (different types, number, or both). The compiler determines which method to invoke based on the method signature.

Example: Method Overloading

  1. Create a new C# Console Application:

  2. Define a class with overloaded methods:

    using System;
    
    class Calculator
    {
        // Method to add two integers
        public int Add(int a, int b)
        {
            return a + b;
        }
    
        // Overloaded method to add three integers
        public int Add(int a, int b, int c)
        {
            return a + b + c;
        }
    
        // Overloaded method to add two doubles
        public double Add(double a, double b)
        {
            return a + b;
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            Calculator calc = new Calculator();
    
            // Calling overloaded methods
            int result1 = calc.Add(5, 10);
            Console.WriteLine("Add(int, int): " + result1);
    
            int result2 = calc.Add(4, 3, 2);
            Console.WriteLine("Add(int, int, int): " + result2);
    
            double result3 = calc.Add(2.5, 3.5);
            Console.WriteLine("Add(double, double): " + result3);
        }
    }
    

Explanation:

  • The Calculator class has three methods named Add, each with different parameter lists.
  • The first Add method takes two integers and returns their sum.
  • The second Add method takes three integers and returns their sum.
  • The third Add method takes two doubles and returns their sum.
  • In the Main method, we create an instance of the Calculator class and call the overloaded Add methods with different parameters to demonstrate method overloading.

Method Overriding

Method overriding allows a derived class to provide a specific implementation of a method that is already defined in its base class. This is achieved by using the virtual keyword in the base class method and the override keyword in the derived class method.

Example: Method Overriding

  1. Create a new C# Console Application:

  2. Define a base class with a virtual method:

    using System;
    
    // Base class
    class Shape
    {
        // Virtual method
        public virtual void Draw()
        {
            Console.WriteLine("Drawing shape...");
        }
    }
    
    // Derived class
    class Circle : Shape
    {
        // Override method
        public override void Draw()
        {
            Console.WriteLine("Drawing circle...");
        }
    }
    
    // Another derived class
    class Rectangle : Shape
    {
        // Override method
        public override void Draw()
        {
            Console.WriteLine("Drawing rectangle...");
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            Shape shape1 = new Shape();
            shape1.Draw(); // Output: Drawing shape...
    
            Shape shape2 = new Circle();
            shape2.Draw(); // Output: Drawing circle...
    
            Shape shape3 = new Rectangle();
            shape3.Draw(); // Output: Drawing rectangle...
        }
    }
    

Explanation:

  • The Shape class has a virtual method Draw.
  • The Circle and Rectangle classes inherit from Shape and override the Draw method with their specific implementations.
  • In the Main method, we create instances of Shape, Circle, and Rectangle and call the Draw method on them.
  • Since the Draw method is virtual in the base class and overridden in the derived classes, the derived class's implementation is executed, demonstrating method overriding.

Top 10 Interview Questions & Answers on Method Overloading and Overriding in C#

Top 10 Questions and Answers on Method Overloading and Overriding in C#

1. What is Method Overloading in C#?

Example:

public class Calculator {
    public int Add(int a, int b) => a + b;
    public double Add(double a, double b) => a + b;
    public int Add(int a, int b, int c) => a + b + c;
}

2. Can you overload methods with different return types only in C#?

Answer: No, in C#, you cannot overload methods based solely on their return types. Both the method name and its parameters (type and number) must be different for C# to differentiate between them. If the return types are different but the method names and parameters are the same, the C# compiler will throw an error.

Incorrect Example:

public class MathOperations {
    // Invalid overloading
    public int Multiply(int a, int b) => a * b;
    public double Multiply(int a, int b) => a * (double)b;  // Compiler error
}

3. What is Method Overriding in C#?

Answer: Method overriding occurs when a derived class provides a specific implementation of a base class method that already exists with the same signature. It allows a class to change or extend the behavior of inherited methods from its base class. This is essential for achieving polymorphism in C#.

Example:

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

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

4. What is the use of the virtual keyword in C#?

Answer: The virtual keyword in C# enables a method, property, indexer, or event to be overridden in a derived class. If a method is declared as virtual, it provides a default implementation that can be overridden by derived classes, but it must be non-static and non-private. Overloading does not use the virtual keyword.

Example:

public class Vehicle {
    public virtual void Display() {
        Console.WriteLine("This is a vehicle");
    }
}

public class Car : Vehicle {
    public override void Display() {
        Console.WriteLine("This is a car");
    }
}

5. Can a method be both overloaded and overridden in C#?

Answer: Yes, a method can be both overloaded and overridden in C#. Overloading occurs within the same class and is based on different parameters, making the method calls distinguishable. Overriding involves redefining a method in a derived class that already exists in its base class, using the override keyword.

Example:

public class BaseClass {
    public virtual void ShowInfo() {
        Console.WriteLine("Base class info");
    }
}

public class DerivedClass : BaseClass {
    public override void ShowInfo() {
        Console.WriteLine("Derived class info");
    }

    public void ShowInfo(int id) {
        Console.WriteLine($"Derived class info with ID: {id}");
    }
}

6. What is the difference between virtual and override keywords in C#?

Answer: The virtual keyword is used in the base class to declare a method that can be overridden by derived classes. The override keyword is used in a derived class to provide a specific implementation of a method that was previously declared as virtual in the base class. A method in the derived class can be overridden only if it is marked as virtual or abstract in the base class.

Example:

public class Parent {
    public virtual void Method() {
        Console.WriteLine("Parent method");
    }
}

public class Child : Parent {
    public override void Method() {
        Console.WriteLine("Child method");
    }
}

7. Can constructors be overloaded in C#?

Answer: Yes, constructors in C# can be overloaded. Constructor overloading allows you to create multiple constructors in a class that have different parameters or parameter lists. Each constructor must have a unique signature, promoting flexibility in object creation.

Example:

public class Person {
    public string Name { get; set; }
    public int Age { get; set; }

    public Person() {
        Name = "John Doe";
        Age = 30;
    }

    public Person(string name) {
        Name = name;
        Age = 30;
    }

    public Person(string name, int age) {
        Name = name;
        Age = age;
    }
}

8. When should you use method overriding and when should you use method overloading?

Answer: Method overriding is used when you want to provide a specific implementation of a method in a derived class that already exists in the base class. It is typically used to change or extend the behavior of base class methods. Method overloading, on the other hand, is used when you want to provide multiple methods within the same class that performs slightly different tasks but are related conceptually. It helps reduce code duplication by reusing method names.

Example:

  • Overriding: When a car derives from a vehicle class, it should provide its own implementation of the Drive method to specify unique behavior.

  • Overloading: Multiple Add methods in a calculator class to handle different types of numbers (integers, doubles, etc.).

9. What is the role of the base keyword in method overriding?

Answer: The base keyword in C# is used to access members of the base class from within the derived class. In method overriding, the base keyword can be used to call the overridden method in the base class. This allows the derived class method to extend or modify the base class implementation rather than replacing it completely.

Example:

public class Vehicle {
    public virtual void Display() {
        Console.WriteLine("Base vehicle display");
    }
}

public class Car : Vehicle {
    public override void Display() {
        base.Display();  // Call the base Display method
        Console.WriteLine("Car display");
    }
}

10. What are the rules for method overloading and overriding in C#?

Answer: Here are the key rules for method overloading and overriding in C#:

  • Overloading:

    • Methods must have the same name but different parameters (different type, number, or both).
    • The return type of methods can vary, but it doesn't contribute to the overload resolution.
    • Overloaded methods are resolved at compile time based on the method signature.
  • Overriding:

    • Methods must have the same name and signature as in the base class.
    • The method in the base class must be declared with the virtual or abstract keyword.
    • The method in the derived class must be declared with the override keyword.
    • The access level (private, protected, public, etc.) of the overriding method must be the same or more accessible than in the base class.
    • Overriding methods are resolved at runtime based on the object's runtime type, not its compile-time type.

Understanding these concepts and rules will help you effectively use method overloading and overriding in C#, leading to cleaner and more maintainable code.

You May Like This Related .NET Topic

Login to post a comment.