我被卡住了,为什么这不起作用:
var childAction = new Action<CancelCommand>(blabla);
Action<IDomainCommand> upperAction = (Action<IDomainCommand>) childAction;
如果 CancelCommand 实现了 IDomainCommand,为什么这不起作用?顺便说一句:这是我在这里想要做的协变还是逆变?;)
提前谢谢你,最好的劳林
编辑 谢谢你们的快速回复!
我需要这个的问题是因为我构造了一个通用的动作模板。我有以下界面:
IMessageBus.RegisterAction<T>(Action<T> 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<DomainCommandBase>)@delegate;
messageBus.Register(actionDelegate);
问题是我需要转换它以便我可以将它传递给这个方法。你看?我们使用的消息总线背后是使用 RX,不幸的是那里的所有方法都使用泛型,现在有一个非泛型重载。