Versi penjelasan saya berasal dari penggunaan properti untuk membantu memahami perbedaan.
overridecukup sederhana kan? Jenis yang mendasari menimpa orang tua.
newmungkin menyesatkan (bagi saya itu). Dengan properti lebih mudah dipahami:
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);
}
Menggunakan debugger Anda dapat melihat bahwa Foo fooada 2 GetSomething properti, karena sebenarnya memiliki 2 versi properti, FoodanBar ', dan untuk mengetahui mana yang akan digunakan, c # "mengambil" properti untuk jenis saat ini.
Jika Anda ingin menggunakan versi Bar, Anda akan menggunakan penggantian atau gunakan Foo foosebagai gantinya.
Bar bar hanya memiliki 1 , karena ingin perilaku yang sama sekali baru untuk GetSomething.
newmembuat anggota baru dengan nama yang sama dan menyebabkan anggota asli menjadi tersembunyi, sementaraoverridememperluas implementasi untuk anggota yang diwariskan"