Suppose I have the following interface:
public interface IMessageProcessor<T> where T: BaseMessage {
void Process(T msg);
}
I have an abstract class that implements this interface:
public abstract class AMessageProcessor<T> : IMessageProcessor<T> where T : BaseMessage {
protected Controller Controller { get; private set; }
public AMessageProcessor(Controller controller) {
Controller = controller;
}
public abstract void Process(T msg);
}
then I have a message:
public class RRMessage : BaseMessage {
...
}
and then I have an implementation:
public class RRMessageProcessor : AMessageProcessor<RRMessage> {
public RRMessageProcessor(Controller controller) : base(controller) {}
public override void Process(RRMessage msg) {
//do something here
}
}
Now in another class I would like to make a list of these processors for different messages:
public readonly List<AMessageProcessor<BaseMessage>> AvailableMessageProcessors;
public MessageProcessingStrategy(Controller controller) {
AvailableMessageProcessors = new List<AMessageProcessor<BaseMessage>>();
/* ----- ERROR HAPPENS AT THIS LINE ------ */
AvailableMessageProcessors.Add(new RRMessageProcessor(controller));
}
And I get this error:
Error CS1503 Argument 1: cannot convert from 'RRMessageProcessor' to 'AMessageProcessor<BaseMessage>'
Seems like that conversion should work... Why can't it convert? How can I get it to work?