Пометка класса как Sealed
предотвращает вмешательство в важные классы, которые могут поставить под угрозу безопасность или повлиять на производительность.
Во многих случаях изоляция класса также имеет смысл при разработке служебного класса с фиксированным поведением, которое мы не хотим изменять.
Например, System
пространство имен в C#
предоставляет множество запечатанных классов, таких как String
. Если он не запечатан, его функциональность можно было бы расширить, что может быть нежелательно, поскольку это фундаментальный тип с заданной функциональностью.
Точно так же structures
in C#
всегда неявно запечатаны. Следовательно, нельзя вывести одну структуру / класс из другой структуры. Причина этого в том, что structures
они используются для моделирования только автономных, атомарных, определяемых пользователем типов данных, которые мы не хотим изменять.
Иногда, когда вы строите иерархию классов, вам может потребоваться ограничить определенную ветвь в цепочке наследования на основе модели предметной области или бизнес-правил.
Например, a Manager
и PartTimeEmployee
оба Employee
s, но у вас нет никакой роли после сотрудников, работающих неполный рабочий день, в вашей организации. В этом случае вы можете захотеть запечатать, PartTimeEmployee
чтобы предотвратить дальнейшее разветвление. С другой стороны, если у вас есть почасовые или еженедельные сотрудники, работающие неполный рабочий день, может иметь смысл унаследовать их от PartTimeEmployee
.