Два вопроса. sealed и throw

Всем привет. Что бы не плодить мелкие темы есть два вопроса.

Первый про sealed.

Этот оператор используется что бы не могли наследоваться от класса. Но на примере Unity, у них класс Application был sealed, а потом в новых версиях сделали просто class Application.

Как понимаю сделали они для того, что бы могли расширять класс Application.

Вопрос: нужно ли вообще использовать sealed и в каких случаях? Если в любой момент потом может пригодится расширение класса. Например у меня сейчас есть класс SteamManager (для работы с Steam API), мне его делать sealed ?

Складывается ощущение что ставят sealed, а потом как придет время убирают его редактирую класс и нарушая солид.

Второй про throw и Debug.LogError.

Зачем и когда вообще использовать Debug.LogError, если можно всегда throw ? Я просто не пойму логику выбора. Например у демонстрации класса API Steam, у них идет инициализация и в случаи провала вызывается Debug.LogError где пишется ошибка, НО почему не вызывать throw ? Точно так же будет писаться ошибка в консоль.


Ответы (1 шт):

Автор решения: Wootiae

Да, sealed нужен для того, чтобы запретить наследование. А const или readonly для того, чтобы запретить изменения. Можете подумать, когда нам нужно убирать эти слова.

При наследовании мы используем абстрактный класс, описывающий интерфейс и общие детали, и классы наследники, реализующие какие-то компоненты (уточнают абстрактый).

В вашем примере класс SteamAPI должен быть запечатан. SteamApi - конкретная вещь, поэтому наследование для него не имеет смысла.

→ Ссылка