Bagikan melalui


Perbedaan Antara Bayangan dan Penimpaan (Visual Basic)

Ketika Anda menentukan kelas yang mewarisi dari kelas dasar, Anda terkadang ingin menentukan ulang satu atau beberapa elemen kelas dasar di kelas turunan. Bayangan dan pengesampingan keduanya tersedia untuk tujuan ini.

Perbandingan

Bayangan dan penimpaan keduanya digunakan ketika kelas turunan mewarisi dari kelas dasar, dan keduanya mendefinisikan ulang satu elemen yang dideklarasikan dengan elemen lain. Tetapi ada perbedaan signifikan antara keduanya.

Tabel berikut membandingkan bayangan dengan pengesampingan.

Titik perbandingan Bayangan Pengambil alihan
Tujuan Melindungi dari modifikasi kelas dasar berikutnya yang memperkenalkan anggota yang telah Anda tentukan di kelas turunan Anda Mencapai polimorfisme dengan menentukan implementasi prosedur atau properti yang berbeda dengan urutan panggilanyang sama 1
Elemen yang ditentukan ulang Jenis elemen apa pun yang dinyatakan Hanya prosedur (Function, Sub, atau Operator) atau properti
Elemen pendefinisan ulang Jenis elemen apa pun yang dinyatakan Hanya prosedur atau properti dengan urutan panggilanidentik 1
Tingkat akses elemen pendefinisan ulang Tingkat akses apa pun Tidak dapat mengubah tingkat akses elemen yang di-override
Keterbacaan dan writabilitas elemen pendefinisian ulang Kombinasi apa pun Tidak dapat mengubah kemampuan membaca atau kemampuan menulis properti yang diganti
Kontrol atas pendefinisan ulang Elemen kelas dasar tidak dapat memberlakukan atau melarang bayangan Elemen kelas dasar dapat menentukan MustOverride, NotOverridable, atau Overridable
Penggunaan kata kunci Shadows disarankan untuk kelas turunan; Shadows diasumsikan jika Shadows dan Overrides tidak ditentukan2 Overridable atau MustOverride diperlukan di kelas dasar; Overrides diperlukan di kelas turunan
Warisan elemen pendefinisian ulang berdasarkan kelas yang berasal dari kelas turunan Anda Elemen bayangan yang diwarisi oleh kelas turunan lebih lanjut; elemen bayangan masih tersembunyi3 Menimpa elemen yang diwarisi oleh kelas turunan lebih lanjut; elemen yang sudah ditimpa tetap ditimpa

1 Urutan panggilan terdiri dari jenis elemen (Function, , Sub, Operatoratau Property), nama, daftar parameter, dan jenis pengembalian. Anda tidak dapat mengambil alih prosedur dengan properti, atau sebaliknya. Anda tidak dapat mengambil alih satu jenis prosedur (Function, Sub, atau Operator) dengan jenis lain.

2 Jika Anda tidak menentukan atau ShadowsOverrides, pengkompilasi mengeluarkan pesan peringatan untuk membantu Anda memastikan jenis pendefinisian ulang mana yang ingin Anda gunakan. Jika Anda mengabaikan peringatan, mekanisme bayangan digunakan.

3 Jika elemen bayangan tidak dapat diakses di kelas turunan lebih lanjut, bayangan tidak diwariskan. Misalnya, jika Anda mendeklarasikan elemen bayangan sebagai Private, kelas yang berasal dari kelas turunan Anda mewarisi elemen asli alih-alih elemen bayangan.

Panduan

Anda biasanya menggunakan metode overriding dalam kasus berikut:

  • Anda mendefinisikan kelas turunan polimorfik.

  • Anda menginginkan jaminan keamanan dengan kompilator memastikan jenis elemen dan urutan panggilan identik.

Anda biasanya menggunakan bayangan dalam kasus berikut:

  • Anda memperkirakan bahwa kelas dasar Anda mungkin dimodifikasi dan mendefinisikan elemen menggunakan nama yang sama dengan Anda.

  • Anda ingin kebebasan mengubah jenis elemen atau urutan panggilan.

Lihat juga