我想用例子来解释主要问题。
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();
结果:
- 添加来自 DerivedClass 的调用
- 编辑来自 BaseClass 的调用
- 接听来自DerivedClass的电话
但我想得到的结果是:
- 添加来自 DerivedClass 的调用
- 编辑来自 BaseClass 的调用
- 接听来自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() { ... }
}
这就是如何做你想做的事,但这里更重要的问题是你为什么要做这件事?可能有更好的方法来设计你的类层次结构,但在不了解您真正想要做什么的情况下,很难给您建议。
我是一名优秀的程序员,十分优秀!