Method Hiding in C#

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:

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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();
    }
}

chevron_right


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:

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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();
    }
}

chevron_right


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:

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // 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();
        }
    }

    chevron_right

    
    

    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:

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // 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();
        }
    }

    chevron_right

    
    

    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:

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // 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();
        }
    }

    chevron_right

    
    

    Output:

    Total number of family members: 2
    


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.




Article Tags :

Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.