Introducción a la anulación de métodos en C #
Anular en términos simples significa, la capacidad de modificar el comportamiento de los métodos. Todos conocemos la función virtual en C ++, en la que invocamos la función desde la clase base en la clase derivada. La anulación de métodos en C # proporciona un privilegio similar a la función virtual en C ++. Para tomar un ejemplo de las aves, todas las aves tendrán el mismo atributo que la mosca, el color, etc. Pero las diferentes aves tendrán una forma diferente de volar y el color variará de un pájaro a otro. Por lo tanto, podemos anular los métodos de la clase base Bird en clases derivadas como un loro, gorrión, cuervo, etc.
¿Cómo usar la anulación en C #?
Supongamos que nuestra aplicación tiene el requisito de cambiar el comportamiento del método de la clase base en una clase derivada, entonces deberíamos optar por la anulación del método. Para lograr esto, necesitamos crear el método en la clase derivada con la misma firma en la clase base para realizar una tarea diferente. Antes de aprender a usar la técnica de anulación, debemos tener en cuenta los siguientes puntos.
- En la programación de C #, la anulación del método también se denomina polimorfismo de tiempo de ejecución, enlace tardío o polimorfismo dinámico.
- Solo en las clases derivadas se puede anular el método. Porque un método se reemplaza en la clase derivada de la clase base.
- El método debe ser un método no virtual o estático para una anulación.
- El modificador de nivel de acceso tanto del método de anulación como del método virtual debe ser el mismo.
El método que se anula mediante la declaración de anulación se denomina método base anulado. Esto estará presente en la clase base. El método base anulado puede ser abstracto, anular o virtual. Implementación nueva llamada, el método de anulación se hereda de esta clase base.
Utilizamos diferentes palabras clave para la anulación de métodos. Son,
1) Palabra clave virtual
El compilador encuentra la palabra clave virtual en el programa, entiende que este método puede ser anulado por cualquiera de sus clases derivadas. La estructura es la siguiente.
public virtual int EnemyHealth()
(
Console.WriteLine("Enemy Health");
)
2) Anular palabra clave
Esto está presente en la clase derivada. Le dice al compilador que este método está anulando el método con el mismo nombre y firma en la clase base.
public override int EnemyHealth ()
(
Console.WriteLine("Enemy 1");
)
Ejemplo
Primero, veamos el ejemplo sin usar la palabra clave Virtual y override.
Código:
class Birds
(
public void Color( )
(
Console.WriteLine("Birds will have different Colors");
)
)
class Parrot:Birds
(
public void Color( )
(
Console.WriteLine("Parrot is Green");
)
)
class ExecutionClass
(
public static void Main( )
(
Birds object;
object = new Birds( );
object .Color( );
object = new Parrot( );
object.Color( );
)
)
Salida:
En el ejemplo anterior, creamos un objeto de la clase Derivada Parrotand almacenando su referencia en el objeto variable de referencia del tipo Birds.
En el siguiente paso, utilizando el objeto variable de referencia, invocamos la función Color (). Como el objeto contiene una referencia a un objeto de tipo Parrot, es natural que esperemos que se ejecute la función Color () de la clase Parrot. Pero estamos equivocados. La belleza de la programación no permitirá que suceda.
Para nuestra sorpresa, lo que se ejecuta es el método Color () de la clase Birds. Esto se debe a que la función se invoca en función del tipo de referencia y no a lo que se refiere el objeto variable de referencia. Dado que el objeto es una referencia del tipo Birds, se invocará la función Color () de la clase Birds, sin importar a quién se refiera el objeto.
Ahora reescribamos el mismo programa con virtual y anulación. Esta vez iremos paso a paso para una mejor comprensión.
Crea una clase base con cualquier nombre. Aquí estoy usando Birds. Escribe un método con la palabra clave virtual. Este será nuestro método anulado que anularemos en la clase heredada. Dentro del método, escriba un mensaje para imprimir en la consola.
class Birds
(
public virtual void Color( )
(
Console.WriteLine("Birds will have different Colors");
)
)
Ahora cree una clase más de Parrot. Esta vez la heredaremos de la clase base que creamos anteriormente, es decir, Birds. Para heredar usamos el símbolo ':'.
clase Parrot: Birds
Aquí escriba una función con una palabra clave de anulación y escriba algún mensaje. Asegúrese de que el nombre y la firma del método en la clase derivada coincidan con el nombre y la firma del método en la clase base.
public override void Color ( )
(
Console.WriteLine("Parrot is Green");
)
Necesitamos una clase más para ejecutar la funcionalidad para verificar la anulación. Crea una clase con cualquier nombre. Dentro de eso escribe la función Main.
class ExecutionClass
(
public static void Main( )
(
)
)
Cree un objeto de la clase principal y active la función utilizando el objeto de la clase. Esto invocará el método Color presente en la clase Birds.
Birds object;
object = new Birds( );
object .Color( );
Ahora cree el objeto de la clase derivada y llame al método Color. Esto invocará el método Color de la clase Parrot.
object = new Parrot( );
object.Color( );
¿Puedes adivinar la salida cuando ejecutamos el programa? Esto es como se muestra a continuación.
Salida:
La anulación de palabras clave y virtual permite invocar la clase base y los métodos de clase derivados por separado en cualquier momento, incluso si los nombres y las firmas de los métodos son los mismos.
Conclusión
En este artículo entendimos la anulación del método, la necesidad de anular el método, el ejemplo del mundo real del principio de anulación, la forma de lograrlo, la necesidad de usar las palabras clave virtuales y de anulación y el ejemplo de anulación usando el código. Podemos concluir que la anulación es una de las características útiles en el polimorfismo que podemos cambiar el comportamiento del método de la clase base en la clase derivada.
Artículos recomendados
Esta es una guía para la anulación de métodos en C #. Aquí discutimos la Introducción, Cómo usar la anulación y las diferentes palabras clave para la anulación de métodos junto con ejemplos y pasos. También puede consultar los siguientes artículos para obtener más información:
- Funciones de C #
- Comandos C #
- ¿Qué es Multithreading en C #?
- Funciones de cadena de C #
- Guía para anular en C ++
- Anulación en Java
- Multithreading en C # con métodos