interface IModel
{
}
class ModelA : IModel
{
}
interface IService<T> where T: IModel
{
}
class ServiceA : IService<ModelA>
{
}
Run Code Online (Sandbox Code Playgroud)
鉴于上面的类和接口的定义,以下工作:
IModel model = new ModelA();
Run Code Online (Sandbox Code Playgroud)
表明ModelA可以强制转换为其接口IModel
以下也适用:
IService<ModelA> service1 = new ServiceA();
Run Code Online (Sandbox Code Playgroud)
表明ServiceA可以强制转换为其接口IService<ModelA>
但是,以下情况会失败:
IService<IModel> service2 = new ServiceA();
Run Code Online (Sandbox Code Playgroud)
错误消息表明ServiceA不能隐式转换为IService<IModel>
我对此感到惊讶,因为:
ModelA可以转换为IModel,并且
ServiceA可以转换为IService<IModel>
我期望发生以下情况:
ServiceA-> IService<ModelA>->IService<IModel>
但这似乎不可能。
有人能解释为什么吗?