Minha versão da explicação vem do uso de propriedades para ajudar a entender as diferenças.
override
é simples o suficiente, certo? O tipo subjacente substitui o pai.
new
é talvez o enganador (para mim era). Com propriedades, é mais fácil 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);
}
Usando um depurador, você pode perceber que Foo foo
possui 2 GetSomething
propriedades, pois na verdade possui 2 versões da propriedade, Foo
eBar
' s, e saber qual usar, C # 'picaretas' a propriedade para o tipo atual.
Se você quisesse usar a versão da barra, você teria usado a substituição ou a Foo foo
substituição.
Bar bar
tem apenas 1 , pois deseja um comportamento completamente novoGetSomething
.
new
cria um novo membro com o mesmo nome e faz com que o membro original para ficar escondido, enquantooverride
estende a implementação de um membro herdado"