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

时间:2013-10-08 03:13:31

标签: c# inheritance

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

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

3 个答案:

答案 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();
       .....
    }
}