Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
20 / 19 / 1
Регистрация: 13.08.2012
Сообщений: 779
.NET 4.x

Когда нужно создавать запечатанные (sealed) классы?

10.10.2015, 16:25. Показов 3066. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые, подскажите пожалуйста, когда надо делать класс запечатанным (sealed) ? Когда возникает случай что, нам нужно запретить наследование от класса ? Поясните пожалуйста.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.10.2015, 16:25
Ответы с готовыми решениями:

Когда предпочтительнее создавать структуры, а когда классы?
Всегда интересовали несколько вещей по поводу C#. 1. Когда предпочтительнее создавать структуры, а когда классы? 2. Кто как использует...

Когда нужно использовать структуры, когда классы, а когда словарь?
Хеллоу. Не могу понять, когда, что, нужно использовать. Допустим мне нужно получить объект, который имеет список объектов. И...

Записи как запечатанные классы
Можно ли утверждать, что записи - запечатанные классы, которые: 1) Хранятся в стеке. 2) Неявно наследуются от System.ValueType. ?...

5
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
10.10.2015, 16:34
Хороший ответ отсюда
Sometimes classes are too precious and not designed to be inherited.
2
5 / 5 / 3
Регистрация: 17.10.2012
Сообщений: 116
10.10.2015, 16:36
Несмотря на всю эффективность и полезность наследования, иногда возникает потребность предотвратить его.
Допустим, что имеется класс, инкапсулирующий последовательность инициализации некоторого специального оборудования, например медицинского монитора.
В этом случае требуется, чтобы пользователи данного класса не могли изменять порядок инициализации монитора, чтобы исключить его неправильную настройку.
Но независимо от конкретных причин в С# имеется возможность предотвратить наследование класса с помощью ключевого слова sealed.
Для того чтобы предотвратить наследование класса, достаточно указать ключевое слово sealed перед определением класса.
Как и следовало ожидать, класс не допускается объявлять одновременно как abstract и sealed,
поскольку сам абстрактный класс реализован не полностью и опирается в этом отношении на свои производные классы, обеспечивающие полную реализацию.

И еще одно замечание: ключевое слово sealed может быть также использовано в виртуальных методах для предотвращения их дальнейшего переопределения.
Допустим, что имеется базовый класс В и производный класс D.
Метод, объявленный в классе В как virtual, может быть объявлен в классе D как sealed.
Благодаря этому в любом классе, наследующем от класса D, предотвращается переопределение данного метода.
(с) C# 4.0 Полное руководство (2011) Шилдт. Г
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
10.10.2015, 16:41
Цитата Сообщение от NEvOl Посмотреть сообщение
когда надо делать класс запечатанным (sealed) ? Когда возникает случай что, нам нужно запретить наследование от класса ?
Да скорее надо бы указать причины, когда делать класс не запечатанным.

Дизайн класса с учетом наследования — та еще головная боль.
1
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
10.10.2015, 16:45
Либо, когда вы проектируете какую-то иерархию объектов, и наиболее младшие из них, замыкающую эту иерархию, должны ее замыкать , то есть функционал уже как бы исчерпал себя, и дальнейшее его развитие уже не нужно и, возможно даже, абсурдно.
Как-то так.
1
20 / 19 / 1
Регистрация: 13.08.2012
Сообщений: 779
10.10.2015, 17:11  [ТС]
kolorotur, выходит что каждый класс который не подразумевает дальнейшего наследования, должен быть запечатан ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.10.2015, 17:11
Помогаю со студенческими работами здесь

Объясните пожалуйста, КОГДА нужно создавать классы
:wall:Здравствуйте. Проблема такая: когда учился в техникуме на программиста - с начала учили структурному программированию (паскаль),...

Удалённые хуки. Когда для них нужно создавать *.dll, а когда необязательно?
Друзья! В туториалах Iczelion'а сказано просто: То тут то там вижу утверждения, что *.dll создавать необязательно, типа и так...

Скажите какие классы нужно создавать и приблизительное содержимое
Скажите приблизительно что мне тут нужно делать какие класи нужно создавать? Написать приложение, которое содержит информацию о...

Когда или в каких случая нужно создавать собственные исключения?
Добрый день. Во время подготовки к экзамену наткнулся на такой вопрос:"Перехват и генерация ошибок." Собственно сам я знаю как их и...

Когда нужно применять .col классы в bootstrap?
Добрый вечер, объясните пожалуйста 1 момент по Bootstrap'y. 1) Когда использовать col-sm -col-md col-lg и их подобные 2) Что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru