Как избежать ошибки "Конструктор по типу" MyType "не найден" при наследовании базового класса
У меня есть приложение Visual Studio 2010 Windows Forms, которое включает базовый класс формы, который наследует другие классы. Конструктор базового класса принимает параметр, который дочерние классы передают базовому классу.
Пример:
public partial class BaseForm : Form
{
public BaseForm(int number)
{
InitializeComponent();
}
}
public partial class ChildForm : BaseForm
{
public ChildForm(int number)
: base(number)
{
InitializeComponent();
}
}
Проблема, с которой я сталкиваюсь, заключается в том, что при попытке открыть ChildForm в режиме VisualStudio Design View я получаю следующую ошибку:
Конструктор типа "MyProject.BaseForm" не найден.
Примечание: независимо от ошибки проект компилируется и работает нормально.
Я могу избежать ошибки, если я перегружаю конструктор тем, который не содержит никаких параметров.
Пример: (Это избавляет от ошибки)
public partial class BaseForm : Form
{
public BaseForm(int number)
{
InitializeComponent();
}
public BaseForm()
{
InitializeComponent();
}
}
public partial class ChildForm : BaseForm
{
public ChildForm(int number)
: base(number)
{
InitializeComponent();
}
}
Мой вопрос в том, как я могу создать базовый класс, который не включает конструктор без параметров и избежать ошибки Design View?
Ответы
Ответ 1
Это совершенно невозможно.
Форма, которую вы видите в представлении проекта, является фактическим экземпляром вашего базового класса.
Если конструктор по умолчанию отсутствует, конструктор не может создать этот экземпляр.
Вы можете пометить конструктор с помощью [Obsolete("Designer only", true)]
и заставить его генерировать исключение, если оно вызвано, когда не в дизайнере, чтобы другие люди не вызывали его.