Моя версия объяснения основана на использовании свойств , чтобы помочь понять различия.
override
достаточно просто, верно? Базовый тип переопределяет родительский.
new
возможно, вводит в заблуждение (для меня это было). Со свойствами это легче понять:
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);
}
Используя отладчик, вы можете заметить, что Foo foo
имеет свойства 2 GetSomething
, поскольку у него фактически есть 2 версии свойства, Foo
и Bar
, и для знать, какой из них использовать, c # "выбирает" свойство для текущего типа.
Если бы вы хотели использовать версию Bar, вы бы использовали переопределение или вместо нее использовали Foo foo
.
Bar bar
имеет только 1 , так как он хочет полностью новое поведение для GetSomething
.