1

是否可以在类继承中调用当前类方法?

假设我们有一个 A 类和一个从 A 继承的 B 类。现在两者都有一个“初始化”方法,这意味着它在 B 中被覆盖。现在我不能使用“base.initialize”从那里调用 A 的“初始化” . 相反,我试图从较低的类构造函数(所以 A 的构造函数)调用它,它会为所有继承的类调用。

所以现在我想在 A 的构造函数上调用 A 的“初始化”。但是当我尝试这样做时,会调用 B 的重写构造函数。

那么有什么可以告诉 VS(或 c#)我正在显式调用我当前所在的类的方法(this.method() 不起作用)?

4

2 回答 2

1

如果将方法标记Initialize为虚拟方法,则意味着派生类可以自由地覆盖该方法,可能不会base.Initialize在进程中调用。如果发生这种情况不合适,则不要将该方法标记为虚拟方法。

就您而言,听起来您只需要Initialize在每个类中使用两个私有方法:

public class A
{
    public A()
    {
        Initialize();
    }

    private void Initialize()
    {
    }
}

public class B : A
{
    public B()
    {
        Initialize();
    }

    private void Initialize()
    {
    }
}

或者,您可能想看看模板方法设计模式。你可以这样设计你的类:

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...
    }
}
于 2012-12-14T20:35:06.063 回答
0

将您的内容放入A.initialize()一个新的私有非虚拟方法中。A从的构造函数和调用这个新方法A.initialize()

于 2012-12-14T20:31:13.013 回答