interface IModel
{
}
class ModelA : IModel
{
}
interface IService<T> where T: IModel
{
}
class ServiceA : IService<ModelA>
{
}
Учитывая приведенное выше определение классов и интерфейсов, работает следующее:
IModel model = new ModelA();
Указывает, что ModelA
может быть приведен к его интерфейсу IModel
Следующеетакже работает:
IService<ModelA> service1 = new ServiceA();
Указывает, что ServiceA
может быть приведен к его интерфейсу IService<ModelA>
Однако происходит следующее:
IService<IModel> service2 = new ServiceA();
Сообщение об ошибкеговорит, что ServiceA
нельзя неявно преобразовать в IService<IModel>
Я удивлен этим, поскольку:
ModelA
можно преобразовать в IModel
, а
ServiceA
можно преобразоватьна IService<IModel>
я ожидал, что произойдет следующее:
ServiceA
-> IService<ModelA>
-> IService<IModel>
Но это не представляется возможным.
У кого-нибудь есть объяснение, почему это так?