为什么没有可能的转换(通用类型受接口限制)?

时间:2018-02-28 18:11:16

标签: c# generics polymorphism

我有以下课程。

interface ICommand {. . .} 

class ShutdownCommand : ICommand { . . .}

class Message<T> where T : ICommand { . . .}

class Communicator
{
    void Send(Message<ICommand> a_msg) { . . .}
}

当我调用以下代码时,我收到一条错误消息,指出无法从类型Message<ShutdownCommand>转换为Message<ICommand>。这对我来说并不直观,因为ShutdownCommand继承自ICommand

var message = new Message<ShutdownCommand>();
m_communicator.SendCommand(message);

我知道我可以通过为Message类添加非泛型接口来解决这个问题,并在Send()方法中将其用作参数类型。
无论它可以按照我上面描述的方式修复......我很好奇为什么没有可能的转换,如果从上面的代码出现转换应该是可能的。

0 个答案:

没有答案