2008-10-31 59 views
1

我有一個抽象基類,繼承自UserControl,然後用它派生許多類。創建派生控件

我的問題是如何優雅地確保生成的函數InitializeComponent()被稱爲每層的類。

所以(抽象)基類有一些控件,將爲所有孩子共享。當創建子類的實例,基構造函數首先被調用,但有什麼辦法能夠完美地調用派生InitializeComponent(),而無需有效地建立相同構造的每一個派生類

public DerivedClass() { 
    InitializeComponent(); 
} 

我想知道如果在每個派生類中重複自己的方法更有效嗎?

實際上,我想(抽象)基類可以稱爲

Derived.InitializeComponent(); 

畢竟,當它在基類的構造(調試),它知道,它是一個派生的實例。 ..

回答

1

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

這將調用你的基類的構造,沒有通常一個神奇的方式做的事情,如果你需要叫InitializeComponents,你可能會必須自己調用它。

0

如果您使InitializeComponent成爲虛擬的,並且您爲所有子類覆蓋它,那麼如果從派生構造函數調用基構造函數,基類將爲每個子類調用正確的方法。

+1

有點危險......基類構造函數會調用最派生的虛擬實現。這意味着子類「InitializeComponent」方法將在子類的構造函數本身之前被調用,這是任何向子類構造函數中添加邏輯的人的時間炸彈。 – 2008-10-31 19:27:47