Приветcтвую, уважаемые!
Частенько возникает следующая ситуация:
//Есть интерфейс
interface INode
{
//Который содержит список элементов, представленных интерфейсом
List<INode> Parents { get; set; }
}
//Хочется реализовать этот интерфейс вот так
class Node : INode
{
//Но так делать нельзя
public List<Node> Parents { get; set; }
}
На ум приходит только такое решение:
interface INode<T> where T: INode<T>
{
List<T> Parents { get; set; }
}
class Node : INode<Node>
{
public List<Node> Parents { get; set; }
}
Но такое решение мне не особо нравится. Использование а-ля Cast<T> тоже не подходит.
Вопрос: знаете ли вы паттерны, которые разрешат описанную выше ситуацию?
А вот так годится? https://ideone.com/xLqgjY
interface INode
{
IEnumerable<INode> Parents { get; }
}
class Node : INode
{
private List<Node> parents;
public IEnumerable<INode> Parents { get { return parents; } }
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости