Цель конструктора - создать экземпляр объекта. Следовательно, он не должен потерпеть неудачу, если не произойдет сбой некоторой предпосылки объекта. В этом конкретном случае ваш единственный вариант - выдать исключение.
Другими словами: вы вызываете конструктор объекта, чтобы создать экземпляр этого объекта, так что это атомарная функция, которая не должна завершиться ошибкой, если у вас нет технической проблемы.
Теперь вам нужно избегать отображения формы при некоторых условиях. Есть несколько способов сделать это. Сначала давайте посмотрим на код:
Application.Run(new Form1());
Этот фрагмент выполняет две вещи: создает экземпляр Form1
и отображает его (передавая Application.Run
). Итак, один из вариантов:
// snippet at program.cs
Form1 mainForm = new Form1();
if (mainForm.IsValid)
{
Application.Run(new Form1());
}
// snippet at Form1.cs
public bool IsValid
{
get
{
// evaluate all conditions that should determine if the form is to be showed.
return condition;
}
}
Вы добавляете код в program.cs для проверки правильности формы. Одним из способов является раскрытие этого свойства в форме. Конечно, если вы соблюдаете разделение интересов , возможно, это будет метод / свойство вашего домена, но это ваш вызов, куда его поместить.
Этот метод / свойство (в моем коде называемое «IsValid») отвечает за проверку возможности отображения формы в это время.
Не забудьте отделить логику от представления в вашей программе.
Это сделало бы это.