Oznaczenie klasy jako Sealed
zapobiega manipulowaniu ważnymi klasami, które mogą zagrozić bezpieczeństwu lub wpłynąć na wydajność.
Często zapieczętowanie klasy ma również sens, gdy projektujemy klasę użytkową o stałym zachowaniu, którego nie chcemy zmieniać.
Na przykład System
przestrzeń nazw w C#
zawiera wiele klas, które są zapieczętowane, takie jak String
. Gdyby nie był zamknięty, możliwe byłoby rozszerzenie jego funkcjonalności, co mogłoby być niepożądane, ponieważ jest to typ podstawowy o danej funkcjonalności.
Podobnie, structures
w C#
są zawsze domyślnie zapieczętowane. Dlatego nie można wyprowadzić jednej struktury / klasy z innej struktury. Powodem tego jest to, że structures
są one używane do modelowania tylko samodzielnych, niepodzielnych, zdefiniowanych przez użytkownika typów danych, których nie chcemy modyfikować.
Czasami podczas budowania hierarchii klas możesz chcieć ograniczyć określoną gałąź w łańcuchu dziedziczenia na podstawie modelu domeny lub reguł biznesowych.
Na przykład, a Manager
i PartTimeEmployee
są oba Employee
, ale nie pełnisz żadnej roli po pracownikach zatrudnionych w niepełnym wymiarze godzin w Twojej organizacji. W takim przypadku możesz chcieć zapieczętować, PartTimeEmployee
aby zapobiec dalszemu rozgałęzianiu. Z drugiej strony, jeśli masz pracowników zatrudnionych w niepełnym wymiarze godzinowym lub tygodniowym, warto odziedziczyć ich po PartTimeEmployee
.