Método oculto en C#

Como ya sabemos sobre el polimorfismo y la anulación de métodos en C#. C# también proporciona un concepto para ocultar los métodos de la clase base de la clase derivada, este concepto se conoce como Ocultación de métodos. También se conoce como método de sombreado . En la ocultación de métodos, puede ocultar la implementación de los métodos de una clase base de la clase derivada utilizando la nueva palabra clave. O, en otras palabras, en la ocultación de métodos, puede redefinir el método de la clase base en la clase derivada utilizando la nueva palabra clave.

Ejemplo:

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

Producción:

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

Explicación: En el ejemplo anterior, My_Family es la clase base y My_Member es una clase derivada. En ambas clases tenemos el mismo nombre de método, es decir, el método member() . Pero en la clase derivada, el método member() se declara con la nueva palabra clave. Cuando se llama a este método, imprime el nombre y la edad de los miembros de la familia, no el número total de miembros de la familia. Lo que significa que cuando llamamos al método member() con la ayuda del objeto de clase derivado, oculta el mismo método de nombre presente en la clase base debido a la presencia de la nueva palabra clave.

Ahora veremos qué sucederá si no usamos la palabra clave new para ocultar el método de una clase base de la clase derivada. Como se muestra en el siguiente ejemplo, cuando no usamos una nueva palabra clave, el compilador ejecutará el código sin dar un error, pero le advertirá que si desea ocultar un método, entonces use la nueva palabra clave.

Ejemplo:

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

Advertencia:

prog.cs(18,14): advertencia CS0108: `My_Member.member()’ oculta el miembro heredado `My_Family.member()’. Use la nueva palabra clave si se pretendía ocultar
prog.cs(9,14): (Ubicación del símbolo relacionado con la advertencia anterior)

Producción:

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

¿Cómo llamar a un método oculto?

En la ocultación de métodos, también puede llamar al método oculto de la clase base en la clase derivada usando tres formas diferentes y las formas son:

  • Al usar la palabra clave base , puede llamar al método oculto de la clase base en su clase derivada que se muestra en el siguiente ejemplo:

    Ejemplo:

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

    Producción:

    Total number of family members: 3
    Name: Rakesh, Age: 40 
    Name: Somya, Age: 39 
    Name: Rohan, Age: 20
    
  • Al convertir el tipo de clase derivado al tipo de clase base, puede invocar el método oculto. Como se muestra en el siguiente ejemplo. Sabemos que en la herencia, la clase derivada tiene todas las capacidades de la clase base, por lo que podemos convertir fácilmente el objeto de una clase derivada en un tipo de clase base.

    Ejemplo:

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

    Producción:

    Total number of family members: 2
    
  • En lugar de usar la variable de referencia de clase derivada, usamos la variable de referencia de clase principal para llamar al método oculto. Es similar a la forma anterior de llamar a un método oculto. Aquí también escribimos case el objeto de la clase derivada en una sintaxis diferente.

    Nota: si intenta invocar un método oculto usando la siguiente sintaxis,

    My_Member obj = new My_Family();

    Aquí, el compilador dará un error porque el objeto de la clase My_Family no puede cumplir con los deberes de la clase My_Member .

    Ejemplo:

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

    Producción:

    Total number of family members: 2
    

Publicación traducida automáticamente

Artículo escrito por ankita_saini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *