Method Hiding in C#

19 Mar, 2019
As we already know about polymorphism and method overriding in C#. C# also provides a concept to hide the methods of the base class from derived class, this concept is known as Method Hiding. It is also known as Method Shadowing. In method hiding, you can hide the implementation of the methods of a base class from the derived class using the new keyword. Or in other words, in method hiding, you can redefine the method of the base class in the derived class by using the new keyword.
Example:
// C# program to illustrate the// concept of method hidingusing System;  // Base Classpublic class My_Family {      public void member()    {        Console.WriteLine("Total number of family members: 3");    }}  // Derived Classpublic class My_Member : My_Family {      // Reimplement the method of the base class    // Using new keyword    // It hides the method of the base class    public new void member()     {        Console.WriteLine("Name: Rakesh, Age: 40 \nName: Somya, "+                               "Age: 39 \nName: Rohan, Age: 20 ");    }}  // Driver Classclass GFG {      // Main method    static public void Main()    {          // Creating the object of the derived class        My_Member obj = new My_Member();          // Access the method of derived class        obj.member();    }}
Output:
Name: Rakesh, Age: 40 
Name: Somya, Age: 39 
Name: Rohan, Age: 20 

Explanation: In the above example, My_Family is the base class and My_Member is a derived class. In both the classes we have the same name method, i.e. member() method. But in the derived class, the member() method is declared with the new keyword. When this method is called, it prints the name and the age of the family members not the total number of family members. Which means when we call the member() method with the help of the derived class object, it hides the same name method present in the base class due to the presence of the new keyword.
Now we will see what will happen if we do not use the new keyword to hide the method of a base class from the derived class. As shown in the below example, when we do not use new keyword compiler will give run the code without giving an error, but it will give warning that if you want to hide a method then uses the new keyword.
Example:
// C# program to illustrate the// concept of method hiding// without using the new keywordusing System;  // Base Classpublic class My_Family {      public void member()    {        Console.WriteLine("Total number of family members: 3");    }}  // Derived Classpublic class My_Member : My_Family {      public void member()    {        Console.WriteLine("Name: Rakesh, Age: 40 \nName: Somya, "+                               "Age: 39 \nName: Rohan, Age: 20 ");    }}  class GFG {      // Main method    static public void Main()    {          // Creating the object of the derived class        My_Member obj = new My_Member();          // Access the method of derived class        obj.member();    }}
Warning:
prog.cs(18,14): warning CS0108: `My_Member.member()’ hides inherited member `My_Family.member()’. Use the new keyword if hiding was intendedprog.cs(9,14): (Location of the symbol related to previous warning)
Output:
Name: Rakesh, Age: 40 
Name: Somya, Age: 39 
Name: Rohan, Age: 20 

In method hiding, you can also call the hidden method of the base class in the derived class using three different ways and the ways are:
By using the base keyword you can call the hidden method of the base class in your derived class shown in the below example:Example:// C# program to illustrate how// to access hidden methodusing System;  // Base Classpublic class My_Family {    public void member()    {        Console.WriteLine("Total number of family members: 3");    }}  // Derived Classpublic class My_Member : My_Family {            public new void member()     {                  // Calling the hidden method of the        // base class in a derived class        // Using base keyword        base.member();        Console.WriteLine("Name: Rakesh, Age: 40 \nName: Somya,"+                              " Age: 39 \nName: Rohan, Age: 20");    }}  class GFG {      // Main method    static public void Main()    {          // Creating the object of the derived class        My_Member obj = new My_Member();          // Access the method of derived class        obj.member();    }}Output:Total number of family members: 3
Name: Rakesh, Age: 40 
Name: Somya, Age: 39 
Name: Rohan, Age: 20

Example:
// C# program to illustrate how// to access hidden methodusing System;  // Base Classpublic class My_Family {    public void member()    {        Console.WriteLine("Total number of family members: 3");    }}  // Derived Classpublic class My_Member : My_Family {            public new void member()     {                  // Calling the hidden method of the        // base class in a derived class        // Using base keyword        base.member();        Console.WriteLine("Name: Rakesh, Age: 40 \nName: Somya,"+                              " Age: 39 \nName: Rohan, Age: 20");    }}  class GFG {      // Main method    static public void Main()    {          // Creating the object of the derived class        My_Member obj = new My_Member();          // Access the method of derived class        obj.member();    }}
Output:
Total number of family members: 3
Name: Rakesh, Age: 40 
Name: Somya, Age: 39 
Name: Rohan, Age: 20

By casting the derived class type to base class type you can invoke the hidden method. As shown in the below example. We know that in inheritance the derived class has all the capabilities of the base class so we can easily cast the object of a derived class into base class type.Example:// C# program to illustrate how// to access hidden methodusing System;  // Base Classpublic class My_Family {      public void member()    {        Console.WriteLine("Total number of family members: 2");    }}  // Derived Classpublic class My_Member : My_Family {          public new void member() {          Console.WriteLine("Name: Rakesh, Age: 40 "+                         "\nName: Somya, Age: 39");    }}  class GFG {      // Main method    static public void Main()    {          // Creating the object of the derived class        My_Member obj = new My_Member();          // Invoking the hidden method        // By type casting        ((My_Family)obj).member();    }}Output:Total number of family members: 2

Example:
// C# program to illustrate how// to access hidden methodusing System;  // Base Classpublic class My_Family {      public void member()    {        Console.WriteLine("Total number of family members: 2");    }}  // Derived Classpublic class My_Member : My_Family {          public new void member() {          Console.WriteLine("Name: Rakesh, Age: 40 "+                         "\nName: Somya, Age: 39");    }}  class GFG {      // Main method    static public void Main()    {          // Creating the object of the derived class        My_Member obj = new My_Member();          // Invoking the hidden method        // By type casting        ((My_Family)obj).member();    }}
Output:
Total number of family members: 2

Instead of using derived class reference variable we use the parent class reference variable for calling the hidden method. It is similar to the above way of calling a hidden method. Here we also type case the object of the derived class in a different syntax.Note: If you try to invoke a hidden method using below syntax,My_Member obj = new My_Family();Here, the compiler will give an error because the object of My_Family class cannot fulfill the duties of My_Member class.Example:// C# program to illustrate how// to access hidden methodusing System;  // Base Classpublic class My_Family {      public void member()    {        Console.WriteLine("Total number of family members: 2");    }}  // Derived Classpublic class My_Member : My_Family {      public new void member() {          Console.WriteLine("Name: Rakesh, Age: 40 "+                         "\nName: Somya, Age: 39");    }}  class GFG {      // Main method    static public void Main()    {          // Invoking the hidden method        My_Family obj = new My_Member();        obj.member();    }}Output:Total number of family members: 2

Note: If you try to invoke a hidden method using below syntax,
My_Member obj = new My_Family();
Here, the compiler will give an error because the object of My_Family class cannot fulfill the duties of My_Member class.
Example:
// C# program to illustrate how// to access hidden methodusing System;  // Base Classpublic class My_Family {      public void member()    {        Console.WriteLine("Total number of family members: 2");    }}  // Derived Classpublic class My_Member : My_Family {      public new void member() {          Console.WriteLine("Name: Rakesh, Age: 40 "+                         "\nName: Somya, Age: 39");    }}  class GFG {      // Main method    static public void Main()    {          // Invoking the hidden method        My_Family obj = new My_Member();        obj.member();    }}
Output:
Total number of family members: 2

CSharp-OOP
C#
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.