Подтвердить что ты не робот

Как избежать ошибки "Конструктор по типу" 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?

4b9b3361

Ответ 1

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

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

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