Wygląda na to, że oficjalne wytyczne Microsoftu dotyczące uszczelniania ewoluowały od czasu zadania tego pytania ~ 9 lat temu i przeszły od filozofii opt-in (domyślnie pieczęć) do rezygnacji (domyślnie nie pieczętuj):
X NIE pieczętować zajęć bez dobrego powodu, aby to zrobić.
Uszczelnianie klasy, ponieważ nie możesz wymyślić scenariusza rozszerzalności, nie jest dobrym powodem. Użytkownicy frameworka lubią dziedziczyć po klasach z różnych nieoczywistych powodów, takich jak dodawanie wygodnych członków. Zobacz Unsealed Classes, aby zapoznać się z przykładami nieoczywistych powodów, dla których użytkownicy chcą dziedziczyć z typu.
Dobre powody do zaplombowania klasy to:
- Klasa jest klasą statyczną. Zobacz Projekt klasy statycznej.
- Klasa przechowuje poufne informacje poufne w dziedziczonych chronionych elementach członkowskich.
- Klasa dziedziczy wielu wirtualnych członków, a koszt ich indywidualnego zapieczętowania przeważałby nad korzyściami wynikającymi z pozostawienia klasy niezamkniętej.
- Klasa jest atrybutem wymagającym bardzo szybkiego wyszukiwania w czasie wykonywania. Atrybuty zapieczętowane mają nieco wyższy poziom wydajności niż atrybuty niezapieczętowane. Zobacz atrybuty.
X NIE deklaruj chronionych lub wirtualnych członków na zapieczętowanych typach.
Z definicji nie można dziedziczyć zapieczętowanych typów. Oznacza to, że nie można wywołać chronionych elementów członkowskich na typach zapieczętowanych, a metody wirtualne na typach zapieczętowanych nie mogą zostać zastąpione.
✓ ROZWAŻ elementy uszczelniające, które zastępujesz. Problemy, które mogą wyniknąć z wprowadzenia wirtualnych członków (omówione w Wirtualnych członkach), dotyczą również zastąpień, choć w nieco mniejszym stopniu. Zapieczętowanie zastąpienia chroni Cię przed tymi problemami, począwszy od tego punktu w hierarchii dziedziczenia.
Rzeczywiście, jeśli przeszukasz bazę kodu ASP.Net Core , znajdziesz tylko około 30 wystąpień sealed class
, z których większość to atrybuty i klasy testowe.
Uważam, że ochrona niezmienności jest dobrym argumentem za uszczelnieniem.