Что не так с кодом ниже?
Код: Выделить всё
public interface IMyListItem
{
}
public interface IMyList
{
IList Items { get; }
}
public class MyListItem : IMyListItem
{
}
public class MyList : IMyList
{
public IList Items { get; } = new List();
}
Что я пробовал:
Измените класс MyList, как показано ниже:
Код: Выделить всё
public class MyList : IMyList
{
public IList Items { get; } = (IList)new List();
}
p>
Далее я попытался объявить IMyList как общий
Код: Выделить всё
public interface IMyList
where T : IMyListItem
{
IList Items { get; }
}
Код: Выделить всё
public class MyList : IMyList
{
public IList Items { get; } = new List();
}
Двигаемся дальше:
Я хочу добавить в IMyListItem ссылку на экземпляр IMyList , содержащий этот элемент.
Как показано в первой части вопроса, я не могу добавить ссылку таким образом:
Код: Выделить всё
public interface IMyListItem
{
IMyList List { get; }
}
Код: Выделить всё
public class MyListItem : IMyListItem
{
public MyList List { get; }
}
// or
public class MyListItem : IMyListItem
{
public IMyList List { get; }
}
Код: Выделить всё
public interface IMyListItem
where T : IMyListItem
{
IMyList List { get; }
}
public interface IMyList
where T : IMyListItem
{
IList Items { get; }
}
public class MyListItem : IMyListItem
{
public IMyList List { get; } // would like "public MyList List { get; }" instead
}
public class MyList : IMyList
{
public IList Items { get; } = new List();
}
- неясно для реализации растушевки.
Код: Выделить всё
public interface IMyListItem where T : IMyListItem - реализовано свойство MyListItem public IMyList List { get; позволяет использовать любую реализацию IMyList, а не только MyList, как ожидалось. Следует изменить на «public MyList List { get; }», но это не соответствует сигнатуре интерфейса.
Подробнее здесь: https://stackoverflow.com/questions/791 ... -interface
Мобильная версия