Контравариантность и Платформа Объекта 4.0: как указать EntityCollection как IEnumerable?

Я указал несколько интерфейсов, которые я реализую как объекты с помощью Платформы Объекта 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 взаимодействовать через интерфейс просто с точки зрения других интерфейсов вместо того, чтобы использовать реальные классы?

Или, я неправильно понимаю что-то более фундаментальное?

6
задан Hamid Pourjam 19 April 2015 в 08:19
поделиться