Mi versión de la explicación proviene del uso de propiedades para ayudar a comprender las diferencias.
overridees lo suficientemente simple, ¿verdad? El tipo subyacente anula el del padre.
newes quizás el engañoso (para mí lo fue). Con propiedades es más fácil de entender:
public class Foo
{
public bool GetSomething => false;
}
public class Bar : Foo
{
public new bool GetSomething => true;
}
public static void Main(string[] args)
{
Foo foo = new Bar();
Console.WriteLine(foo.GetSomething);
Bar bar = new Bar();
Console.WriteLine(bar.GetSomething);
}
Al usar un depurador puede notar que Foo footiene 2 GetSomething propiedades, ya que en realidad tiene 2 versiones de la propiedad, Foo'sy Bar', y para saber cuál usar, c # "selecciona" la propiedad para el tipo actual.
Si quisieras usar la versión de la barra, hubieras usado anular o usar Foo fooen su lugar.
Bar bartiene solo 1 , ya que quiere un comportamiento completamente nuevo para GetSomething.
newcrea un nuevo miembro con el mismo nombre y hace que el miembro original se oculte, mientrasoverrideextiende la implementación para un miembro heredado"