Contenido
Un método virtual puede tener un cuerpo de implementación. Si la declaración de un método de instancia contiene el modificador `virtual`, entonces dicho método se denomina método virtual. Después de usar el modificador `virtual`, no se permiten los modificadores `static`, `abstract` ni `override`.
Código del método virtual en el patrón de fábrica simple:
Se puede ver que esta clase tiene un método `GetResult()`. El método `GetResult()` contiene un modificador `virtual`, que indica que las clases derivadas de esta clase base pueden anular este método. La función del método `GetResult()` es: mostrar la frase"¡Este es un método virtual!"a la consola.
La implementación de un método virtual puede ser reemplazada por una clase derivada. El proceso de reemplazar la implementación del método virtual heredado se denomina anular el método. En una llamada a un método virtual, el tipo en tiempo de ejecución de la instancia involucrada en la llamada determina cuál implementación del método se llamará realmente.
Diferencia entre métodos abstractos y métodos virtuales
- 1. Un método virtual debe tener una parte de implementación; un método abstracto no proporciona una parte de implementación. Un método abstracto es un método que obliga a las clases derivadas a anularlo; de lo contrario, las clases derivadas no podrán ser instanciadas.
- 2. Un método abstracto solo se puede declarar en una clase abstracta, no así un método virtual. Si una clase contiene un método abstracto, entonces esa clase también es abstracta y debe declararse como clase abstracta.
- 3. Un método abstracto debe anularse en la clase derivada, similar a una interfaz; un método virtual no necesita anularse en la clase derivada.
En pocas palabras, un método abstracto necesita que las subclases lo implementen. Un método virtual ya está implementado; puede ser anulado por las subclases o no, según los requisitos.
Tanto los métodos abstractos como los métodos virtuales pueden ser anulados por las clases derivadas.
Resumen
En general, un método virtual es aquel cuya declaración contiene el modificador `virtual`. Por ahora solo se puede entender así; más adelante, cuando se tenga una comprensión más profunda, se complementará. También invitamos a todos a compartir su propio entendimiento.