У меня есть подобная иерархия классов
public abstract class CalendarEventBase{}
public class TrainingEvent : CalendarEventBase{}
public class AuditEvent : CalendarEventBase{}
Я хотел создать действие Action lamda с параметром универсального типа типа CalendarEventBase, который я мог бы назначить следующим различным методам:
public void EmailCancelation(TrainingEvent trainingEvent)
public void EmailCancelation(AuditEvent auditEvent)
Я создал следующее недопустимое назначение:
Action<CalendarEventBase> emailCancelation = _trainingService.EmailTrainingCancellation;
Компилятор жалуется, что он ожидал метод с void (CalendarEventBase) в качестве подписи. Я был удивлен этим, так как думал, что он будет принимать более производный тип.
Чтобы обойти это, я создал следующий делегат, который позволяет мне выполнить мою задачу:
public delegate void EmailCancelation<in T>(T calendarEvent) where T : CalendarEventBase;
Мой вопрос: мог ли я выполнить задачу без необходимости создавать дополнительного делегата? Я думал, что могу просто создать экземпляр Action.
Любая помощь или указатели, очень признательны.