У меня есть иерархия классов, подобная этой
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.
Любая помощь или указатели, с благодарностью.