我有这样的类层次结构
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 实例。
任何帮助或指示,非常感谢。