У меня есть базовый класс, реализующий интерфейс, и, кроме того, специализированный класс, наследующий базовый класс.
Я реализовал метод интерфейса в базовом классе и пометил его как виртуальный, а также переопределил этот же метод в специализированном классе.
Теперь я хочу разрешить метод GetData () на некоторой основе, чтобы он возвращал метод базового класса или метод дочернего класса.
Так в принципе, как я могу вызвать метод базового класса, используя ссылку на специализированный класс или ссылку на интерфейс?
Редактировать 1 У меня есть существующий поставщик данныхи я хочу сохранить его функциональность как есть и хочу использовать некоторый подкласс или класс-обертку, где я могу написать новую реализацию (другого провайдера), помните, что я хочу продолжать работать с существующим провайдером, как для существующего сценария, так и для нового провайдерадля других сценариев).что если я использую шаблон декоратора, чтобы решить это?Любой другой шаблон, который может решить эту проблему?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
interface IDataProvider
{
void GetData();
}
abstract class StandardDataProvider : IDataProvider
{
public virtual void GetData()
{
Console.WriteLine("GetData_StandardDataProvider");
}
}
class ManagedDataProvider : StandardDataProvider
{
public override void GetData()
{
Console.WriteLine("GetData_ManagedDataProvider");
}
}
class Program
{
static void Main(string[] args)
{
IDataProvider dataprovider = new ManagedDataProvider();
dataprovider.GetData();
Console.ReadLine();
}
}
}