Абстрактная функция имеет динамический возвращаемый тип — C#

#c# #templates #generics

#c# #шаблоны #обобщения

Вопрос:

Я пытаюсь заставить абстрактную функцию возвращать список пользовательского типа данных во время выполнения.

//Абстрактный класс: Integr

 abstract public List < object > getRefills();
  

//Реализация в производном классе: TMTStandard

 public override List < TMTStandardRefill > getRefills()
{

    List<TMTStandardRefill> refills = db.TMTStandarRefills.ToList();
    return refills;

}
  

// Я вызываю функцию для привязки моих данных к источнику данных gridview

 dataGridView1.DataSource = integr.getRefills();
  

Будем признательны за любую помощь. Я просмотрел дженерики, но не смог найти решение.

Комментарии:

1. Какую ошибку вы получили при использовании вышеупомянутого подхода?

2. C # не поддерживает ковариацию возвращаемого типа при виртуальных переопределениях.

Ответ №1:

Создайте Integr универсальный из T :

 public abstract class Integr<T>
{
    public abstract IList<T> GetRefills();
}

public class TMTStandard : Integr<TMTStandardRefill>
{
    public override IList<TMTStandardRefill> GetRefills()
    {
        // ...
    }
}