Katakan kita mempunyai asas "a", termasuk dua kaedah "foo" dan "bar". Kaedah "Foo" diisytiharkan untuk umum, dan pengisytiharan kaedah "bar" adalah maya awam, yang membolehkan kelas yang diperoleh untuk menulis semula pelaksanaannya. Sekarang, pertimbangkan derivatif "B" yang diwarisi dari "A".
tersembunyi
Sebagai contoh, dalam serpihan kod yang disediakan:
Kata kunci "baru" sebelum kaedah Cina
B "menunjukkan bahawa objek" B "diakses oleh jenis" B ".public new int Foo() { return 1;} //隐藏
menulis semula <重>
Sebaliknya, apabila penulisan semula berlaku dalam kaedah kelas derivatif, kaedahnya adalah sama dengan kaedah maya atau kaedah abstraksi dalam kelas asas. Dalam kes ini, pelaksanaan kelas yang diperoleh secara eksplisit menggantikan pelaksanaan kelas asas dan menjadi tingkah laku lalai contoh yang diperolehi.
Kerana pernyataan "bar" di pangkalan "A" adalah maya, kata kunci "menimpa" membolehkan kelas "B" untuk menulis semula dan memberikan kelakuannya sendiri.
public override int Bar() {return 1;} //重写
Apabila menukar contoh yang diperolehi ke dalam rujukan kelas asas, bersembunyi boleh menyebabkan tingkah laku tidak sengaja. Dalam kes ini, kaedah tersembunyi di kelas asas boleh dipanggil bukan kaedah penulisan semula dalam kelas derivatif, yang boleh menyebabkan kesilapan semasa runtime.
Walau bagaimanapun, penulisan semula mengikuti struktur hierarki warisan dan memastikan bahawa kaedah yang sesuai yang ditakrifkan dalam kelas ini dilaksanakan dalam kaedah yang sesuai untuk kelas yang diperolehi, untuk memastikan tingkah laku yang konsisten dan dijangka.Atas ialah kandungan terperinci Apakah perbezaan antara membayangi dan mengatasi C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!