类的当前“级别”的调用方法

时间:2012-12-14 20:27:23

标签: c# class inheritance

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

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

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

那么有什么可以告诉VS(或c#)我明确地调用了当前类的方法(this.method()不起作用)?

2 个答案:

答案 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()调用此新方法。