Open In App

Method Hiding in C#

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

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 hiding
using System;
  
// Base Class
public class My_Family {
  
    public void member()
    {
        Console.WriteLine("Total number of family members: 3");
    }
}
  
// Derived Class
public 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 Class
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:

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 keyword
using System;
  
// Base Class
public class My_Family {
  
    public void member()
    {
        Console.WriteLine("Total number of family members: 3");
    }
}
  
// Derived Class
public 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 intended
prog.cs(9,14): (Location of the symbol related to previous warning)

Output:

Name: Rakesh, Age: 40 
Name: Somya, Age: 39 
Name: Rohan, Age: 20 

How to call a hidden method?

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 method
    using System;
      
    // Base Class
    public class My_Family {
        public void member()
        {
            Console.WriteLine("Total number of family members: 3");
        }
    }
      
    // Derived Class
    public 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 method
    using System;
      
    // Base Class
    public class My_Family {
      
        public void member()
        {
            Console.WriteLine("Total number of family members: 2");
        }
    }
      
    // Derived Class
    public 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 method
    using System;
      
    // Base Class
    public class My_Family {
      
        public void member()
        {
            Console.WriteLine("Total number of family members: 2");
        }
    }
      
    // Derived Class
    public 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
    


Last Updated : 19 Mar, 2019
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads