Ваш конкретный пример не сработает, поскольку ваш класс:
public class MyList<T> : IMyItemsList, IMyGenericList<T> where T : IItem
{
public IEnumerable<T> GetList()
{
return null;
}
}
пытается реализовать и IEnumerable<IItem> GetList()
, и IEnumerable<T> GetList()
, что является двумя разными вещами.Это первое явно перечислимое значение IItem
(как того требует ваш IMyItemsList
интерфейс), а второе перечисляемое значение T
.
В этом сценарии T
имеет тип IItem
, но не явно IItem
.Поэтому во время компиляции IEnumerable<IItem> GetList()
не является IEnumerable<T> GetList()
, поэтому компилятор правильно выдаст ошибку, сообщающую, что IEnumerable<IItem> GetList()
не реализован.
Другая проблема, с которой вы столкнетесь, - это то, что происходит, когдакто-то делает:
var list = new MyList<IItem>();
Компилятор попытается создать конкретную реализацию MyList<IItem>
, которая будет иметь два определения IEnumerable<IItem> GetList()
.
Я бы пересмотрел ваш дизайн для оценкиединственное число IEnumerable<T> GetList()
.
Кроме того, и просто требователен с моей стороны: "enumerable"! = "list": P