Ковариантность и контравариантность для делегатов действий

я застрял, почему нетт это работает:

  var childAction = new Action(blabla);
  Action upperAction = (Action) childAction;

Почему нетЭто работает, если CancelCommand реализует IDomainCommand? Кстати: это со-или контравариант, что яя пытаюсь сделать здесь? ;)

заранее спасибо только лучший лаурин

РЕДАКТИРОВАТЬ Спасибо вам, ребята, за ваши очень быстрые ответы!

Проблема, почему мне это нужно, заключается в том, что я создаю общий шаблон действий. У меня есть следующий интерфейс:

IMessageBus.RegisterAction(Action registerAction) where T : IDomainCommand

Поскольку я должен построить это действие во время выполнения, мой код выглядит следующим образом:

var genericExecuteAction = this.GetType().GetMethod("ExecuteCommandAction",
                                                            BindingFlags.NonPublic | BindingFlags.Instance).MakeGenericMethod(commandType);

var actionType = typeof(Action).MakeGenericType(commandType);
var @delegate = Delegate.CreateDelegate(actionType, this, genericExecuteAction);
var actionDelegate = (Action)@delegate;

messageBus.Register(actionDelegate);

Проблема в том, что мне нужно привести его так, чтобы я мог передать его этому методу. Ты видишь? За шиной mesasge, которую мы используем, используется RX, и, к сожалению, во всех методах, которые там используются, используются дженерики.

Ответы на вопрос(4)

Ваш ответ на вопрос