Моя версія пояснення походить від використання властивостей, щоб допомогти зрозуміти відмінності.
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 версії властивості, Foos і Bar's, і щоб знати, яку саме використовувати, c # "вибирає" властивість для поточного типу.
Якби ви хотіли скористатися версією Bar, ви б Foo fooзамість цього використали переопределення або використання .
Bar barмає лише 1 , оскільки хоче абсолютно нової поведінки GetSomething.
newстворює нового учасника з тим самим іменем і змушує приховати початковий член, тоді якoverrideрозширює реалізацію для спадкового члена"