从派生类实例调用基类的虚方法

时间:2018-02-13 16:57:29

标签: c# oop

我想用例子解释主要问题。

public class BaseClass
{
    public virtual void Add()
    {
        Console.WriteLine("Add call from BaseClass");
    }

    public virtual void Edit()
    {

        Console.WriteLine(" Edit call from BaseClass");
        this.Get();
    }

    public virtual void Get()
    {
        Console.WriteLine(" Get call from BaseClass");
    }
}


public class DerivedClass:BaseClass
{
    public override void Add()
    {

        Console.WriteLine(" Add call from DerivedClass");
        base.Edit();
    }

    public override void Edit()
    {
        Console.WriteLine(" Edit call from DerivedClass");
    }

    public override void Get()
    {

        Console.WriteLine(" Get call from DerivedClass");
    }
}

并称之为

DerivedClass d = new DerivedClass();
d.Add();

结果:

  1. 从DerivedClass添加电话
  2. 编辑来自BaseClass的电话
  3. DerivedClass
  4. 接听电话

    但我希望得到结果:

    1. 从DerivedClass添加电话
    2. 编辑来自BaseClass的电话
    3. BaseClass
    4. 接听电话

      当派生类调用自己的添加方法时,添加方法会调用基类编辑方法。当从派生类调用基类编辑方法时,它会调用派生类 get 方法。但我想调用基类的get 方法。 我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:6)

  

我怎样才能做到这一点?

如果您不想要虚拟发送,那么不会发送虚拟方法。调度非虚方法。这意味着必须存在非虚方法,所以让我们写一个。然后很明显它必须如何调用:

public class BaseClass 
{
  public virtual void Add() { ... }
  public virtual void Edit() { this.BaseGet(); }
  public virtual void Get() { this.BaseGet(); }
  private void BaseGet() { ... }
}

设计你的类层次结构的方法,但不知道你真正想要做什么,很难建议你。