我有一个基类和一个派生类,如下所示:
//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()
?
谢谢。
答案 0 :(得分:4)
基类定义了Find as Virtual,这是子类可以覆盖它的信号,如果是,基类将使用该覆盖。
如果要在子类中调用基础查找,请不要实现查找。
如果要在子类中定义一个名为Find的方法,该方法实际上并未连接到base.Find,请使用new关键字而不是override关键字。
答案 1 :(得分: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();
.....
}
}
答案 2 :(得分: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();
.....
}
}