Как мы можем вызвать виртуальный метод из другого метода в базовом классе, даже если текущий экземпляр имеет производный класс?Как мы вызываем виртуальный метод из другого метода в базовом классе, даже если текущий экземпляр имеет производный класс?
Я знаю, что мы можем назвать method2 в Base класса из метода в Derived класса, используя base.Method2(), но то, что я хочу сделать, это называть его с другого виртуального метода в базе класс. Является ли это возможным?
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.
Я хочу, чтобы метод, который может быть переопределен, но он может быть вызван непосредственно в базовом классе, когда это необходимо. Спасибо, в любом случае. –
@newgps Вам нужно будет вытащить код в другой метод, а затем в соответствии с решением Хенрика и моим советом. –