में त्रुटि टाइप करें मैं आदेश के लिए दृढ़ता से टाइप किए गए इनपुट और आउटपुट पैरामीटर के साथ एक कमांड पैटर्न को कार्यान्वित करने का प्रयास कर रहा हूं।कमांड पैटर्न
सब मैं दो इंटरफेस है कि इनपुट और आदेश के लिए उत्पादन के निशान बनाया है सबसे पहले:
interface IRequest { }
interface IResponse { }
तो मैं बना लिया है आधार वर्ग और इंटरफेस। यह सार रिसीवर
interface IReceiver<TRequest, TResponse>
where TRequest : IRequest
where TResponse : IResponse
{
TResponse Action(TRequest request);
}
और इस सार आदेश
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);
}
अब मैं इन वस्तुओं का उपयोग करने की कोशिश कर रहा हूँ और इसलिए मैं जरूरत ठोस वर्गों
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 };
}
}
मैं बनाया है अंत में है एक कमांडप्रोसेसर क्लास बनाया है जो एकाधिक कमांड को पूरी तरह से संसाधित करने में सक्षम होना चाहिए
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/प्रोग्रामिंग-गाइड/अवधारणाओं/covariance-contravariance/अनुक्रमणिका और यह भी: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/covariance-contravariance/ बनाने-संस्करण-जेनेरिक-इंटरफेस – Fildor