У меня есть общий тип параметров в моих классах. Почему я могу это сделать:Общий параметр интерфейса левой стороны
BaseFoo<InterfaceImplementation> foo = new ChildFoo<InterfaceImplementation>();
Но не это? Не следует ли компилятору выяснить, что AnInterface
- это реализация InterfaceImplementation
?
BaseFoo<AnInterface> foo = new ChildFoo<InterfaceImplementation>();
Я надеялся, чтобы быть в состоянии сделать что-то вроде этого:
BaseFoo<AnInterface> foo = new ChildFoo<InterfaceImplementation>();
BaseFoo<AnInterface> bar = new ChildFoo<AnotherInterfaceImplementation>();
Если обе реализации имеют общий интерфейс.
Преобразование 'BaseFoo' в интерфейс и использование [Co- и Contravariance] (https://msdn.microsoft.com/en-us/library/ee207183.aspx). –
Что-то вдоль линии «Оранжевый - это плод, но вы не можете обращаться с корзиной с апельсинами как с корзиной фруктов, так как после этого вы можете добавить банан в корзину», но почему-то я всегда ошибаюсь в метафоре. – Maarten