強く型付けされたコマンドとそのコマンド自体の入出力パラメータを持つコマンドパターンを実装しようとしています。コマンドパターンにタイプエラーがあります
Iは、コマンドの入力と出力マーク二つのインタフェース作成したすべての最初の:私は基本クラスとインタフェースを作成した
interface IRequest { }
interface IResponse { }
を。これは私がこれらのオブジェクトを使用しようとしていますので、私は私が最終的に必要な具体的なクラス
class TypeARequest : IRequest
{
public TypeARequest() {
}
public int NumericValueA { get; set; }
public int NumericValueB { get; set; }
}
class TypeAResponse : IResponse
{
public TypeAResponse() {
}
public int Result { get; set; }
}
class SumCommand : AbstractCommand<TypeARequest, TypeAResponse>
{
public SumCommand(IReceiver<TypeARequest, TypeAResponse> receiver) : base(receiver) {
}
public override TypeAResponse Execute(TypeARequest request) {
return _receiver.Action(request);
}
}
class SumReceiver : IReceiver<TypeARequest, TypeAResponse>
{
public TypeAResponse Action(TypeARequest request) {
return new TypeAResponse() { Result = request.NumericValueA + request.NumericValueB };
}
}
を作成している今
abstract class AbstractCommand<TRequest, TResponse>
where TRequest : IRequest
where TResponse : IResponse
{
protected IReceiver<TRequest, TResponse> _receiver;
public AbstractCommand(IReceiver<TRequest, TResponse> receiver) {
_receiver = receiver;
}
public abstract TResponse Execute(TRequest request);
}
抽象受信機
interface IReceiver<TRequest, TResponse>
where TRequest : IRequest
where TResponse : IResponse
{
TResponse Action(TRequest request);
}
この抽象コマンドですCommandProcessorクラスを作成しました。複数のコマンドを一度に処理できるようにする必要があります。
class CommandProcessor
{
IList<AbstractCommand<IRequest, IResponse>> _supportedCommands = new List<AbstractCommand<IRequest, IResponse>>();
public CommandProcessor() {
}
void AddSupportedCommand(AbstractCommand<IRequest, IResponse> item) {
_supportedCommands.Add(item);
}
void SetupSupportedCommands() {
// ERROR HERE
AddSupportedCommand(new SumCommand(new SumReceiver()));
}
}
しかし、私はコンパイル時にエラーが言って取得しています:
引数1: に 'SumCommand' から変換することはできません 'をAbstractCommand'
任意のヘルプや提案?
私はこれがあなたのキャッチだと思い
詳細情報:https://docs.microsoft.com/en -us/dotnet/csharp/programming-guide/concepts/covariance-contravariance/indexとこれもhttps://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/covariance-contravariance/にあります。 Creating-variant-generic-interfaces – Fildor