Dalam C # dan C ++ / CLI kata kunci sealed
(atau NotInheritable
dalam VB) digunakan untuk melindungi kelas dari kemungkinan pewarisan (kelas tidak dapat diwariskan). Saya tahu bahwa salah satu fitur pemrograman berorientasi objek adalah pewarisan dan saya merasa bahwa penggunaan dari sealed
bertentangan dengan fitur ini, ia menghentikan pewarisan. Apakah ada contoh yang menunjukkan manfaat sealed
dan kapan penggunaannya penting?
Tambahan dari jawaban luar biasa Baboon :
Pada catatan terkait, hanya berlaku untuk kelas yang tidak disegel: metode apa pun yang dibuat
virtual
adalah titik ekstensi, atau setidaknya terlihat seperti itu harus menjadi titik ekstensi. Mendeklarasikan metodevirtual
harus menjadi keputusan sadar juga. (Di C # ini adalah keputusan sadar; di Jawa tidak.)EDIT : Beberapa tautan yang relevan:
Perhatikan juga bahwa Kotlin menyegel kelas secara default; nya
open
kata kunci adalah kebalikan dari Jawafinal
atausealed
C # . (Yang pasti, tidak ada kesepakatan universal bahwa ini adalah hal yang baik .)sumber
Menandai kelas sebagai
Sealed
mencegah perusakan kelas penting yang dapat membahayakan keamanan, atau memengaruhi kinerja.Seringkali, menyegel kelas juga masuk akal ketika seseorang mendesain kelas utilitas dengan perilaku tetap, yang tidak ingin kita ubah.
Misalnya,
System
namespace diC#
menyediakan banyak kelas yang disegel, sepertiString
. Jika tidak disegel, dimungkinkan untuk memperluas fungsinya, yang mungkin tidak diinginkan, karena ini adalah tipe dasar dengan fungsionalitas tertentu.Demikian pula,
structures
inC#
selalu tersegel secara implisit. Karenanya seseorang tidak dapat memperoleh satu struktur / kelas dari struktur lain. Alasan untuk ini adalah yangstructures
digunakan untuk memodelkan hanya tipe data yang berdiri sendiri, atom, dan ditentukan pengguna , yang tidak ingin kita modifikasi.Terkadang, saat Anda membangun hierarki kelas, Anda mungkin ingin menutup cabang tertentu dalam rantai warisan, berdasarkan model domain atau aturan bisnis Anda.
Misalnya, a
Manager
danPartTimeEmployee
keduanyaEmployee
s, tetapi Anda tidak memiliki peran apa pun setelah karyawan paruh waktu di organisasi Anda. Dalam kasus ini, Anda mungkin ingin menyegelPartTimeEmployee
untuk mencegah percabangan lebih lanjut. Di sisi lain, jika Anda memiliki karyawan paruh waktu per jam atau mingguan, mungkin masuk akal untuk mewarisi merekaPartTimeEmployee
.sumber
unseal
kelas nanti, jika diperlukan, daripada menyegelnya dan menghancurkan semua kelas yang bergantung padanya.Saya pikir posting ini memiliki beberapa poin yang baik, kasus spesifiknya adalah ketika mencoba mentransmisikan kelas yang tidak disegel ke antarmuka acak apa pun, kompiler tidak membuang kesalahan; tetapi ketika disegel digunakan, kompilator mengeluarkan kesalahan yang tidak dapat diubah. Kelas tertutup membawa keamanan akses kode tambahan.
https://www.codeproject.com/Articles/239939/Csharp-Tweaks-Why-to-use-the-sealed-keyword-on-cla
sumber