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