new and override basico¶
Fuentes¶
Cuando usar new y cuando usar virtual/override.
Supongamos que tenemos 2 clases
class A
{
public void MethodA()
{
Console.WriteLine("Metodo en clase A");
}
// Es lo mismo que:
// public virtual void MethodA()
// {
// Console.WriteLine("Metodo en clase A");
// }
}
class B : A
{
public new void MethodA()
{
Console.WriteLine("Metodo en clase B");
}
}
class Test
{
public static void Main()
{
A a = new A();
B b = new B();
A ab = new B();
a.MethodA(); // Metodo en clase A
b.MethodA(); // Metodo en clase B
ab.MethodA(); // Metodo en clase A
}
}
Ahora, si declaramos el método MethodA de la clase A como virtual y el MethodA de la clase B como override, el resultado es el siguiente:
class A
{
public virtual void MethodA()
{
Console.WriteLine("Metodo en clase A");
}
}
class B : A
{
public override void MethodA()
{
Console.WriteLine("Metodo en clase B");
}
}
class Test
{
public static void Main()
{
A a = new A();
B b = new B();
A ab = new B();
a.MethodA(); // Metodo en clase A
b.MethodA(); // Metodo en clase B
ab.MethodA(); // Metodo en clase B
}
}
Con new, si una clase es downgradeada, mostrara el resultado del método base, en cambio con override, lo sobrescribe siempre y muestra el valor de la clase derivada.