Я указал несколько интерфейсов, которые я реализую как объекты с помощью Платформы Объекта 4. Самый простой демонстрационный код, который я могу придумать:
public class ConcreteContainer : IContainer
{
public EntityCollection Children { get; set; }
}
public class ConcreteChild : IChild
{
}
public interface IContainer
{
IEnumerable Children { get; set; }
}
public interface IChild
{
}
Я получаю следующую ошибку компилятора от вышеупомянутого:
'Демонстрация. ConcreteContainer' не реализует интерфейсного участника 'Демонстрация. IContainer. Дети'. 'Демонстрация. ConcreteContainer. Дети' не могут реализовать 'Демонстрацию. IContainer. Дети', потому что это не имеет типа возврата соответствия 'Системы. Наборы. Универсальный. IEnumerable'
Мое текущее понимание - то, что это вызвано тем, что IEnumerable (который реализован EntityCollection) является ковариантным, но по-видимому не контравариантным:
Этот параметр типа является ковариантным. Таким образом, можно использовать или тип, который Вы указали или любой тип, который более получен. Для получения дополнительной информации о ковариантности и контравариантности, посмотрите Ковариантность и Контравариантность в Дженериках.
Я корректен, и если так, являюсь там каким-либо способом, которым я могу достигнуть своей цели определения IContainer
взаимодействовать через интерфейс просто с точки зрения других интерфейсов вместо того, чтобы использовать реальные классы?
Или, я неправильно понимаю что-то более фундаментальное?