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