C# 继承阻止基类方法调用派生类方法
本文关键字:类方法 调用 派生 基类 继承 | 更新日期: 2023-09-27 18:34:31
我有一个基类和一个派生类,如下所示:
//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()
?谢谢。
基类已将 Find 定义为虚拟,这是子类可以重写它的信号,如果是这样,基类将使用该重写。
如果要在子类中调用基本查找,请不要实现 Find。
如果要在子类中定义一个名为 Find 的方法,该方法实际上并未连接到 base。查找,使用 new 关键字而不是覆盖关键字。
通过不重写 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();
.....
}
}
如果你想调用基类的 Find(( 方法,但仍然保留让 Find(( 成为具有派生实现的虚拟方法的灵活性,请分解基的逻辑。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();
.....
}
}