是否可以在类继承中调用当前的类方法?
假设我们有一个继承自A的A类和一个B类。现在两个都有一个“初始化”方法,这意味着它在B中被覆盖。现在我不能使用“base”。初始化“从那里调用A”初始化“。相反,我试图从低级构造函数(所以A的构造函数)调用它,它被调用所有继承的类。
所以现在我想在A的构造函数上调用A的“初始化”。但是当我尝试时,B的重写构造函数被调用。
那么有什么可以告诉VS(或c#)我明确地调用了当前类的方法(this.method()不起作用)?
答案 0 :(得分:1)
如果将方法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...
}
}
答案 1 :(得分:0)
将A.initialize()
的内容放入新的私有非虚拟方法。从A
的构造函数和A.initialize()
调用此新方法。