Görünüşe göre mühürleme ile ilgili resmi Microsoft yönergeleri, bu soru yaklaşık 9 yıl önce sorulduğundan beri gelişti ve bir tercih felsefesinden (varsayılan olarak mühür) vazgeçmeye (varsayılan olarak mühürleme) geçtiler:
X Bunu yapmak için iyi bir neden olmadan sınıfları KAPATMAYIN .
Bir genişletilebilirlik senaryosu düşünemediğiniz için bir sınıfı kapatmak iyi bir neden değildir. Çerçeve kullanıcıları, kolaylık üyeleri eklemek gibi çeşitli açık olmayan nedenlerle sınıflardan miras almayı severler. Kullanıcıların bir türden miras almak istemesinin açık olmayan nedenlerinin örnekleri için Mühürsüz Sınıflar'a bakın.
Bir sınıfı mühürlemek için iyi nedenler şunları içerir:
- Sınıf, statik bir sınıftır. Statik Sınıf Tasarımı konusuna bakın.
- Sınıf, güvenliğe duyarlı sırları miras alınan korumalı üyelerde depolar.
- Sınıf, birçok sanal üyeyi miras alır ve onları ayrı ayrı mühürlemenin maliyeti, sınıfı mühürsüz bırakmanın faydalarından daha ağır basar.
- Sınıf, çok hızlı çalışma zamanı araması gerektiren bir özniteliktir. Mühürlü nitelikler, mühürlenmemiş olanlardan biraz daha yüksek performans seviyelerine sahiptir. Özniteliklere bakın.
X Mühürlü türlerde korumalı veya sanal üyeler BİLDİRMEYİN.
Tanım olarak, mühürlenmiş türler kaynağından miras alınamaz. Bu, mühürlü türlerdeki korumalı üyelerin çağrılamayacağı ve mühürlenmiş türlerdeki sanal yöntemlerin geçersiz kılınamayacağı anlamına gelir.
✓ Geçersiz kıldığınız sızdırmazlık elemanlarını DİKKAT EDİN. Sanal üyelerin tanıtılmasından kaynaklanabilecek sorunlar (Sanal Üyeler'de tartışılmıştır), biraz daha az olsa da, geçersiz kılmalar için de geçerlidir. Bir geçersiz kılmayı mühürlemek, miras hiyerarşisindeki o noktadan başlayarak sizi bu sorunlardan korur.
Aslında, ASP.Net Core kod tabanını ararsanız sealed class
, çoğu öznitelikler ve test sınıfları olmak üzere yalnızca yaklaşık 30 oluşum bulacaksınız .
Değişmezliğin korunmasının mühürleme lehine iyi bir argüman olduğunu düşünüyorum.