public static void Main()
var msgProcessor = new RRMessageProcessor();
var b = msgProcessor.CanProcess(new RRMessage());
Console.WriteLine(b ? "Yes" : "No");
public interface IBaseMessage
public interface IMessageProcessor<T> where T : IBaseMessage
public class RRMessage : IBaseMessage
public class BaseMessageProcessor
public bool CanProcess<T>(T msg) where T : IBaseMessage
return this is IMessageProcessor<T>;
public class RRMessageProcessor : BaseMessageProcessor, IMessageProcessor<RRMessage>
public void Process(RRMessage msg)