gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 18:54:25 25 4
gpt4 key购买 nike

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

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方法。当从派生类调用基类edit方法时,它会调用派生类get方法。但我想调用基类的get 方法。我怎样才能做到这一点?

最佳答案

How can I achieve this?

如果您不想要虚拟分派(dispatch),那么不要分派(dispatch)虚拟方法。调度一个非虚方法。这意味着必须存在一个非虚方法,所以让我们写一个。然后它必须如何调用就变得很明显了:

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

这就是如何做你想做的事,但这里更重要的问题是你为什么要做这件事?可能有更好的方法来设计你的类层次结构,但在不了解您真正想要做什么的情况下,很难给您建议。

关于c# - 从派生类实例调用基类的虚方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48771884/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com