Как избежать ошибки "конструктор по типу 'MyType' не найден" при наследовании базового класса


У меня есть приложение Visual Studio 2010 для Windows Forms, которое включает базовый класс Form, который наследуют другие классы. Конструктор базового класса принимает параметр, который дочерние классы будут передавать базовому классу.

Пример:

public partial class BaseForm : Form
{
    public BaseForm(int number)
    {
        InitializeComponent();
    }
}

public partial class ChildForm : BaseForm
{
    public ChildForm(int number)
        : base(number)
    {
        InitializeComponent();
    }
}

Проблема, с которой я сталкиваюсь, заключается в том, что при попытке открыть дочернюю форму в режиме конструктора VisualStudio я получаю следующую ошибку:

Конструктор типа ' 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();
    }
}

Мой вопрос в том, как я могу создать базовый класс, который не включает конструктор без параметров и избежать ошибки представления проекта?

1 22

1 ответ:

Это совершенно невозможно.

Форма, которую вы видите в проектном представлении, является фактическим экземпляром вашего базового класса.
Если конструктора по умолчанию нет, конструктор не может создать этот экземпляр.

Можно пометить конструктор символом [Obsolete("Designer only", true)] и заставить его выдавать исключение, если он вызывается не в конструкторе, чтобы другие пользователи не могли его вызывать.