正如您在下面的代碼中看到的,DoStuff()方法在構造一個Child對象期間在Init()之前被調用。C#如何在對象構造後執行代碼(後構造)
我現在處於一個有許多孩子班的情況。因此,在每個子的構造函數中直接在Init()之後重複調用DoStuff()方法並不是一個優雅的解決方案。
有沒有什麼辦法可以在父類中創建某種類型的構造函數,並在子構造函數之後執行?這樣,我可以在那裏調用DoStuff()方法。
如果您有任何其他的設計理念可以解決我的問題,我也想聽聽!
abstract class Parent
{
public Parent()
{
DoStuff();
}
protected abstract void DoStuff();
}
class Child : Parent
{
public Child()
// DoStuff is called here before Init
// because of the preconstruction
{
Init();
}
private void Init()
{
// needs to be called before doing stuff
}
protected override void DoStuff()
{
// stuff
}
}
找到顯示構建順序的鏈接... http://www.csharp411.com/c-object-initialization/基本上指出您的派生實例構造函數是要做的東西的最後一個。我認爲將DoStuff從基類構造函數中提取出來並明確地調用它是最直接的方法,或者提供可以被覆蓋的基類Init。 – deepee1
+1:我不知道爲什麼,但我總是(錯誤地)認爲子構造函數首先被調用;這就是爲什麼我總是在我的構造函數調用中使用base()。謝謝你教育我。 – NotMe