从Form派生并使InitializeComponent / Components受保护

时间:2014-12-02 20:41:59

标签: c# winforms inheritance polymorphism

我有两个共享很多功能的表单,因此我决定将其分解为基本的Form类。 但是,我必须更改的内容包括自动生成的System.ComponentModel.Container components并将InitializeComponent类转换为virtual 这样每个继承类都可以调用它的重写方法。

我在网上看到一些问题,你应该永远不要在构造函数中调用虚方法,这是有道理的,因为这个类是从base->最少继承的。 我还考虑过保留InitializeComponents private,但我仍然需要初始化components,所以我至少需要protected

这种技术有什么缺陷我应该小心吗? (好奇心:如果我在层次结构的不同层次上有多个私有方法会反射到火焰中吗?)

简而言之,我需要为两个表格分解一个基类,以便我有这个:

class FormBase 
{
    protected IContainer components;
    private void InitalizeComponents() {/*common stuff*/}
    public FormBase()
    {
        InitializeComponents();
    }
}

class FormA :FormBase
{
    private void InitalizeComponents() {/*specialized stuff*/}
    public FormA()
    {
        InitializeComponents();
    }
}

class FormB :FormBase
{
    private void InitalizeComponents() {/*specialized stuff*/}
    public FormB()
    {
        InitializeComponents();
    }
}

0 个答案:

没有答案