Overloading Methods
When you have multiple methods in a class having the same name but different signatures (parameters), they are known as
public class BaseClass {
public void Method(int num) {
Console.WriteLine('Number in BaseClass is ' + num);
}
public void Method(string st) {
Console.WriteLine('String in BaseClass is ' + st);
}
}
Here, BaseClass
has two methods called Method()
with two different signatures — one integer and another one string.
When you create an instance of BaseClass
, you can call Method()
with either an integer or string argument and the compiler will automatically invoke the appropriate method:
BaseClass b = new BaseClass();
//---prints out: Number in BaseClass is 5---
b.Method(5);
//---prints out: String in BaseClass is This is a string---
b.Method('This is a string');
Suppose that you have another class inheriting from BaseClass
with a Method()
method that has a different signature, like this:
public class DerivedClass : BaseClass {
//---overloads the method---
public void Method(char ch) {
Console.WriteLine('Character in DerivedClass is ' + ch);
}
}
Then, DerivedClass
now has three overloaded Method()
methods, as illustrated in Figure 6-3.

Figure 6-3
You can now pass three different types of arguments into Method()
— character, integer, and string:
DerivedClass d = new DerivedClass();
//---prints out: Character in DerivedClass is C---
d.Method('C');
//---prints out: Number in BaseClass is 5---
d.Method(5);
//---prints out: String in BaseClass is This is a string---
d.Method('This is a string');
What happens if you have a Method()
having the same signature as another one in the base class, such as the following?
public class DerivedClass : BaseClass {
//---overloads the method
public void Method(char ch) {
Console.WriteLine('Character in DerivedClass is ' + ch);
}
}
In this case, Method(int num)
in DerivedClass
will hide the same method in BaseClass
, as the following printout proves:
DerivedClass d = new DerivedClass();
//---prints out: String in BaseClass is This is a string---
d.Method('This is a string');
//---prints out: Character in DerivedClass is C---
d.Method('C');
If hiding Method(int num)
in BaseClass
is your true intention, use the new
keyword to denote that as follows (or else the compiler will issue a warning):
//---overloads the method with the same parameter list
Console.WriteLine('Number in DerivedClass is ' + num);
}
In C#, you use the new
keyword to hide methods in the base class by Shadows
keyword.
The following table summarizes the different keywords used for inheritance.
Modifier | Description |
---|---|
new | Hides an inherited method with the same signature. |
static | A member that belongs to the type itself and not to a specific object. |
virtual | A method that can be overridden by a derived class. |
abstract | Provides the signature of a method/class but does not contain any implementation. |