このようなクラス階層があります
public abstract class CalendarEventBase{}
public class TrainingEvent : CalendarEventBase{}
public class AuditEvent : CalendarEventBase{}
次のさまざまなメソッドに割り当てることができる CalendarEventBase 型のジェネリック型パラメーターを持つアクション Action ラムダを作成したかったのです。
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 インスタンスを作成するだけでよいと思いました。
任意のヘルプまたはポインタ、大歓迎です。