私は立ち往生しています、なぜこれが機能しないのですか?
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を使用していますが、残念ながら、そこで使用されているすべてのメソッドでジェネリックが使用されており、現在はジェネリックではないオーバーロードが発生しています。