Паттерны реализации абстракции List<Interface>

198
30 августа 2018, 02:20

Привет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> тоже не подходит.

Вопрос: знаете ли вы паттерны, которые разрешат описанную выше ситуацию?

Answer 1

А вот так годится? https://ideone.com/xLqgjY

interface INode
{
  IEnumerable<INode> Parents { get; }
}
class Node : INode
{
  private List<Node> parents;
  public IEnumerable<INode> Parents { get { return parents; } }
}
READ ALSO
Добавить json к ответу сервера

Добавить json к ответу сервера

Есть список объектов (некоторые данные), которые достаются из БДЯ хочу, чтобы при обращении к сайту клиенту отдавалась страница, а вместе...

208
htaccess: замена середины ссылки

htaccess: замена середины ссылки

Народ, вопрос простой, но разобраться не могу самостоятельноНикак не получается настроить

237
отправка письма с файлом на почту

отправка письма с файлом на почту

Не приходят письма на почту, вроде и ошибок нет, как не старался изменять, не работаетВот код обработчика может кто подскажет:

248