Как проверить здесь, если базовый класс возвратил null или он выполнил свою работу?
Конструктор ничего не возвращает. Цель конструктора - привести объект в состояние инициализации таким образом, чтобы он был готов к работе.
Реальный вопрос: Как я должен сигнализировать любой производный класс, если инициализация завершилась неудачно в базе, и у этого есть много ответов, которые зависят от контекста IMO.
Если задача DoStuff
является критически важной и должна работать для работы этой иерархии объектов, то бросать исключение - это правильный способ справиться с этим, так как вы не можете работать с объектом.
Если DoStuff
это «приятно иметь», но не критично для работы с объектом, вы можете просто сохранить защищенный bool
сигнализации успех или неудача:
public class A
{
protected bool wasSuccessfull;
public A()
{
wasSuccessfull = DoStuff();
}
public bool DoStuff() => true;
}
public class B : A
{
public B()
{
if (wasSuccessfull)
Console.WriteLine("yay");
}
}
Я обычно стараюсь избегать поднятия тяжестей в конструктор объекта. Если у вас есть длительная работа, мне обычно нравится документировать и выставлять метод Initialize
. Когда я создаю новый объект, мне нравится, чтобы он был доступен как можно скорее вызывающему, избегая любых потенциальных зависаний, например, например, подключение к базе данных.
Если что-то не работает правильно, есть ошибки, поэтому вы должны использовать утверждения try-catch. –