2008-10-31 57 views
1

我有一个抽象基类,继承自UserControl,然后用它派生许多类。创建派生控件

我的问题是如何优雅地确保生成的函数InitializeComponent()被称为每层的类。

所以(抽象)基类有一些控件,将为所有孩子共享。当创建子类的实例,基构造函数首先被调用,但有什么办法能够完美地调用派生InitializeComponent(),而无需有效地建立相同构造的每一个派生类

public DerivedClass() { 
    InitializeComponent(); 
} 

我想知道如果在每个派生类中重复自己的方法更有效吗?

实际上,我想(抽象)基类可以称为

Derived.InitializeComponent(); 

毕竟,当它在基类的构造(调试),它知道,它是一个派生的实例。 ..

回答

1

公共DerivedClass():基地() {}

这将调用你的基类的构造,没有通常一个神奇的方式做的事情,如果你需要叫InitializeComponents,你可能会必须自己调用它。

0

如果您使InitializeComponent成为虚拟的,并且您为所有子类覆盖它,那么如果从派生构造函数调用基构造函数,基类将为每个子类调用正确的方法。

+1

有点危险......基类构造函数会调用最派生的虚拟实现。这意味着子类“InitializeComponent”方法将在子类的构造函数本身之前被调用,这是任何向子类构造函数中添加逻辑的人的时间炸弹。 – 2008-10-31 19:27:47