继承基类时如何避免错误“找不到'MyType'类型的构造函数”错误

问题描述 投票:25回答:2

我有一个Visual Studio 2010 Windows窗体应用程序,其中包含其他类将继承的Form基类。基类的构造函数采用一个参数,子类将将该参数传递给基类。

示例:

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

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

我遇到的问题是,当我尝试在VisualStudio的设计视图模式下打开ChildForm时,收到以下错误:

找不到类型为'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();
    }
}

我的问题是,如何创建不包含无参数构造函数的基类并避免“设计视图”错误?

c# visual-studio-2010 inheritance windows-forms-designer base-class
2个回答
31
投票

这完全不可能。

您在设计视图中看到的表单是基类的实际实例。如果没有默认构造函数,则设计器无法创建该实例。

[您可以用[Obsolete("Designer only", true)]标记构造函数,如果在设计器中未调用它,则使它抛出异常,以防止其他人调用它。


0
投票

您需要调整BaseForm输出类型,在项目的属性中,将输出类型从Windows应用程序更改为类库。

ref:https://docs.microsoft.com/zh-tw/dotnet/framework/winforms/advanced/walkthrough-demonstrating-visual-inheritance

© www.soinside.com 2019 - 2024. All rights reserved.