명령 자체에 강력한 유형의 입력 및 출력 매개 변수가있는 명령 패턴을 구현하려고합니다.명령 패턴에 유형 오류가 있습니다.
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 : 'AbstractCommand'
어떤 도움이나 제안 에 'SumCommand'에서 변환 할 수 없습니다?
나는 이것이 당신의 캐치 추측 : https://docs.microsoft.com/en를 -us/dotnet/csharp/programming-guide/concepts/공분산 - 반 환율/색인 및 기타 : https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/covariance-contravariance/ Creating-variant-generic-interfaces – Fildor