繁体   English   中英

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

[英]Calling base class's virtual method from derived class instance

我想举例说明主要问题。

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的电话

但我想得到的结果是:

  1. 添加来自DerivedClass的呼叫
  2. 编辑来自BaseClass的呼叫
  3. BaseClass拨打电话

当派生类调用其自己的Add方法时, Add方法将调用基类EDit方法。 当从派生类称为基类的编辑方法,它要求得到 派生类的方法。 但是我想调用基类的get方法。 我该如何实现?

我该如何实现?

如果您不希望虚拟调度,则不要调度虚拟方法 派遣非虚拟方法。 这意味着必须存在非虚拟方法,因此让我们编写一个。 然后变得很明显,必须如何调用它:

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

怎么做你想要什么,但这里更重要的问题是,为什么你要去做这件事情? 设计类层次结构可能是更好的方法,但是如果不了解您真正想做什么,就很难为您提供建议。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM