如果您將方法Initialize
標記爲虛擬,則表示派生類可以自由覆蓋該方法,可能不會在該過程中調用base.Initialize
。如果發生這種情況並不好,則不要將該方法標記爲虛擬。
對你來說,這聽起來像你只需要兩個私人Initialize
方法,每個類:
public class A
{
public A()
{
Initialize();
}
private void Initialize()
{
}
}
public class B : A
{
public B()
{
Initialize();
}
private void Initialize()
{
}
}
或者,你可能想看看Template Method design pattern。你可以這樣設計你的課程:
public class A
{
public A()
{
Initialize();
}
private void Initialize()
{
// Initialize the base class A.
// Then call DerivedInitialize. If this is actually a derived object,
// DerivedInitialize will initialize the derived instance. Otherwise,
// it won't do anything.
DerivedInitialize();
}
protected virtual void DerivedInitialize()
{
}
}
public class B : A
{
public B()
{
Initialize();
}
protected override void DerivedInitialize()
{
// Initialize B-specific stuff...
}
}
你確定它被覆蓋?嚴重的是,你想要完成什麼?可能有一種更直接的方式來實現你的目標。 –
看起來你不應該重寫初始化方法。 –
C#中的方法默認不是虛擬的 - 您必須使用'virtual'關鍵字來標記它們,然後在子類中的方法上使用'override'關鍵字。如果你這樣做,你絕對可以**使用'B'類中的'base.Initialize()'。 –