Два вопроса. 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 шт):
Да, sealed нужен для того, чтобы запретить наследование. А const или readonly для того, чтобы запретить изменения. Можете подумать, когда нам нужно убирать эти слова.
При наследовании мы используем абстрактный класс, описывающий интерфейс и общие детали, и классы наследники, реализующие какие-то компоненты (уточнают абстрактый).
В вашем примере класс SteamAPI должен быть запечатан. SteamApi - конкретная вещь, поэтому наследование для него не имеет смысла.