He aprendido que el uso de métodos virtuales proporciona un comportamiento predeterminado para un método/función. Mi consulta es que, cuando podemos implementar un método del mismo nombre (como en la clase base) usando "nuevo" en la clase derivada y podemos llamarlo por objetos por separado, entonces ¿cuál es el uso del método virtual? Por ejemplo;¿Está utilizando el método virtual solo la ventaja de la generación de instancia única?
class A
{
public void F()
{
//default behavior
}
public virtual void G()
{
//default behavior
}
}
class B:A
{
new public void F()
{
//new behavior from that of class A
}
public override void G()
{
//new behavior from that of class A
}
}
class Test
{
public static void Main(string[] args)
{
//For calling A's method use same compile time and run time object
A obj1 = new A();
//For calling B's method use compile time object of A and run time of B
A obj2 = new B();
obj1.F(); //O/P is A's method result
obj2.F(); //O/P is A's method result
obj1.G(); //O/P is A's method result
obj2.G(); //O/P is B's method result
}
Mi pregunta es por qué G virtual() en la clase A es necesaria cuando podemos proporcionar un comportamiento por defecto, así como comportamientos derivados mediante el uso de un mismo objeto en tiempo de compilación y ejecutar un objeto de tiempo de ambas clases A y B, así como:
A obj1 = new A(); //for calling A's methods
B obj2 = new B(); //for calling B's methods
A obj3 = new B(); //for having default behavior of class A using B's run time object.
Lo fui a buscar sólo es que en caso de que acabamos virtuales no necesitan hacer un objeto más de la misma compilar y ejecutar el tipo de tiempo. Se puede lograr con un solo objeto que es el tiempo de compilación del tipo A y el tiempo de ejecución del tipo B.
Tal vez mi mente no se soluciona con la respuesta ... No puedo entenderlo claramente. ¿Puedes darle un toque más realista? Sí, gracias por la pronta respuesta. – user1740176
Me temo que no tengo idea de lo que quiere decir con "toque más realista". –
Bueno, no lo dejen en claro. Estaba intentando preguntar eso: ¿el uso del método virtual solo ahorra memoria? ¿Para no crear más objetos o tiene otros motivos también? Por un toque realista, me refería a cualquier ejemplo de la vida real. – user1740176