即使当前实例是派生类,我们如何从基类中的另一个方法调用虚方法?

即使当前实例是派生类,我们如何从基类中的另一个方法调用虚方法?

我知道我们可以通过使用base.Method2()Derived类中的方法调用Base类中的Method2,但我想要做的是从Base类中的另一个虚方法调用它。 可能吗?

using System; namespace ConsoleApplication1 { class Program { static void Main( string[] args ) { Base b = new Derived( ); b.Method1( ); } } public class Base { public virtual void Method1() { Console.WriteLine("Method1 in Base class."); this.Method2( ); // I want this line to always call Method2 in Base class, even if the current instance is a Derived object. // I want 'this' here to always refer to the Base class. Is it possible? } public virtual void Method2() { Console.WriteLine( "Method2 in Base class." ); } } public class Derived : Base { public override void Method1() { Console.WriteLine( "Method1 in Derived class." ); base.Method1(); } public override void Method2() { Console.WriteLine( "Method2 in Derived class." ); } } } 

使用上面的代码,它将输出:

 Method1 in Derived class. Method1 in Base class. Method2 in Derived class. 

而我期望的是:

 Method1 in Derived class. Method1 in Base class. Method2 in Base class. 

不,你不能这样做,虚方法的目的是派生类可以覆盖实现,甚至从基类调用时也使用实现。

如果这会导致问题,那么您需要运行的代码不应该是虚拟方法。

明显的解决方案:

  public virtual void Method1() { Console.WriteLine("Method1 in Base class."); this.Method2Private( ); } private void Method2Private() { Console.WriteLine( "Method2 in Base class." ); } public virtual void Method2() { Method2Private(); }