C# 如何正确扩展WinForms

C# 如何正确扩展WinForms,c#,winforms,oop,constructor,C#,Winforms,Oop,Constructor,常规的C#Windows窗体如下所示(非设计器代码): 现在让我们创建一个派生形式: public partial class EntityForm : BaseForm { public EntityForm() : base() { } public EntityForm(Entity entity) : base(entity.Name) { } } 第二种形式无法正常工作。当初始化组件()时,则在Base

常规的C#Windows窗体如下所示(非设计器代码):

现在让我们创建一个派生形式:

public partial class EntityForm : BaseForm
{
    public EntityForm()
        : base()
    {
    }

    public EntityForm(Entity entity)
        : base(entity.Name)
    {
    }
}
第二种形式无法正常工作。当
初始化组件()时,则在
BaseForm
的上下文中这样做(因为它总是被定义为不可重写和私有的)

乍一看,解决方案可能是使用
InitializeComponent()

我做错了什么?有什么想法吗?

一个可能的解决方案是完全不向构造函数传递参数,也就是说,只允许一个无参数构造函数调用
InitializeComponent()
,这是任何自定义控件的默认值。 然后我需要第二种方法来实际设置控件。可以根据需要重写此方法

原始源的修复示例:

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

    public virtual void Initialize(string title)
    {
        this.Text = title;
    }
}

public partial class EntityForm : BaseForm
{
    public EntityForm()
    {
        InitializeComponent();
    }

    public virtual void Initialize(Entity entity)
    {
        base.Initialize(entity.Name); // the 'base' keyword is somewhat redundant
    }
}

您的代码示例显示了
EntityForm
继承
Form
。您确定这是一个实际的工作代码示例吗?如果没有,请发布可靠的重现问题的帖子。嗯,我的错。没错。已修复。无论如何,不调用基构造函数都不是选项。不清楚“第二个表单停止正常工作”是什么意思,但坦率地说,我怀疑它是否与表单继承或
InitializeComponent()
方法有关。如果
EntityForm
有一个
InitializeComponent()
方法,它应该在构造函数中调用该方法。如果没有一个好的代码示例,甚至不可能知道“停止正常工作”是什么意思,更不用说提供一个解决方案了。上面的示例现在应该足够了。引用我自己的话:初始化组件()时;调用时,它是在BaseForm的上下文中执行的(因为它总是定义为不可重写和私有的)。构造函数没有返回类型<代码>公共无效
毫无意义。
public partial class BaseForm : Form
{
    public BaseForm()
    {
        InitializeComponent();
    }

    public virtual void Initialize(string title)
    {
        this.Text = title;
    }
}

public partial class EntityForm : BaseForm
{
    public EntityForm()
    {
        InitializeComponent();
    }

    public virtual void Initialize(Entity entity)
    {
        base.Initialize(entity.Name); // the 'base' keyword is somewhat redundant
    }
}