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()?谢谢。

C# 继承阻止基类方法调用派生类方法

基类已将 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();
       .....
    }
}