2

我有一个基类和一个派生类,如下所示:

//base class
public class BST
{
    public virtual void Find();
    public virtual void Insert()
    {
        Find();
    }
}


// derived class
public class splayTree:BST
{
    public override void Find()
    {
       base.Find();
       ...
    }
    public override void Insert()
    {
       base.Insert();
       .....
    }
}

在我创建了一个 splayTree 对象 splayTree 之后,

  • 我打电话splayTree.Insert();
  • Insert()来电base.Insert()
  • base.Insert()派生类的调用Find()

我怎样才能让基类的base.Insert()调用?Find()谢谢你。

4

3 回答 3

4

基类已将 Find 定义为 Virtual,这是子类可以覆盖它的信号,如果是这样,则基类将使用该覆盖。

如果你想在你的子类中调用基础 Find,就不要实现 Find。

如果您想在您的子类中定义一个名为 Find 的方法,该方法与 base.Find 没有虚拟连接,请使用 new 关键字而不是 override 关键字。

于 2013-10-08T03:18:24.510 回答
0

如果您想调用基类的 Find() 方法,但仍保留让 Find() 成为具有派生实现的虚拟方法的灵活性,请将 base.Find() 方法的逻辑分解为可以显式调用的私有方法从基类:

//base class
public class BST
{
    private void _Find()
    {
        // base.Find() implementation here
    }

    public virtual void Find()
    {
        _Find();
    }

    public virtual void Insert()
    {
        _Find();
    }
}


// derived class
public class splayTree:BST
{
    public override void Find()
    {
       base.Find();
       ...
    }
    public override void Insert()
    {
       base.Insert();
       .....
    }
}
于 2013-10-08T03:46:29.630 回答
0

通过不覆盖 Find 方法:

//base class
public class BST
{
    public virtual void Find();
    public virtual void Insert()
    {
        Find();
    }
}


// derived class
public class splayTree:BST
{
    public void Find()
    {
       base.Find();
       ...
    }
    public override void Insert()
    {
       base.Insert();
       .....
    }
}
于 2013-10-08T03:33:40.760 回答