У меня есть интерфейс, объявляющий несколько методов (на С#):
internal interface ILetter<T> where T:IEntity
{
List<T> GetRecords();
DocumentParameters GetDocumentParameters(T record);
void MarkRecordAsHandled(T record, bool letterSent);
}
У меня также есть абстрактный класс, реализующий вышеуказанный интерфейс, который также добавляет кучу общих функций. Это выглядит примерно так:
abstract class AbstractLetter<T> : ILetter<T> where T:IEntity
{
public abstract List<T> GetRecords();
public abstract DocumentParameters GetDocumentParameters(T record);
public abstract void MarkRecordAsHandled(T record, bool letterSent);
protected readonly FamisContext FamisContext = new FamisContext();
protected bool KnownEmail(string socialSecurityNumber){ doing stuff }
}
Наконец, у меня есть разные классы, наследуемые от вышеуказанного базового класса (AbstractLetter). Они, конечно же, включают в себя конкретные реализации методов, объявленных в интерфейсе.
Я бы хотел сделать пакетную работу, создавая разные виды писем, на основе методов из интерфейса. Я думал, что смогу сделать это, составив список, а затем перебирая список, используя одни и те же методы для каждого элемента. Но, видимо, я не могу этого сделать — по крайней мере, без явного приведения их типов.
Итак, мой вопрос: могу ли я сделать что-то вроде приведенного ниже, но без приведения типов (и, конечно, других букв)?
var test = new List<ILetter<IEntity>> {new JobTrainingLetter() as ILetter<IEntity>};