Как вызвать виртуальный метод из другого метода базового класса, даже если текущий экземпляр относится к производному классу?

Как мы можем вызвать виртуальный метод из другого метода в базовом классе, даже если текущий экземпляр относится к производному классу?

Я знаю, что мы можем вызывать Method2в классе Baseиз метода класса 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.
5
задан Setyo N 29 March 2012 в 08:56
поделиться