Универсальный класс C# содержит экземпляр класса, производного от него

#c# #templates #generics

Вопрос:

Я знаю, что название немного сбивает с толку, но потерпите.

Мне нужно сделать следующее

 class TemplateClasslt;Tgt; {  T nextNode;  T prevNode; }  class Derived : TemplateClasslt;Derivedgt; {  public int Name; }  

потому что я хочу nextNode и prevNode автоматически быть типом производного класса (он же. Производные)

Но когда я добавляю некоторые методы, TemplateClass я получаю ошибки.

 class TemplateClasslt;Tgt; {  public T nextNode;  public T prevNode;  Mode mode;   public enum Mode  {  isHead = 0, isTail, isMember, isNull  }   public void init (T previous, T next)  {  prevNode = previous;  nextNode = next;  }   public void init (T get, Mode getMode)  {  mode = getMode;   if ((int)getMode == 0)  {  nextNode = get;  prevNode = null;  get.prevNode = this;  }  else if ((int)getMode == 1)  {  prevNode = get;  nextNode = null;  get.nextNode = this;  }  else  {  Console.WriteLine ("Used the wrong "init" method");  }   } }   

Я получаю ошибки get.prevNode = this; и get.nextNode = this;

Ошибка заключается в следующем :

  'T' does not contain a definition for 'prevNode' and no accessible extension method 'prevNode' accepting a first argument of type 'T' could be found (are you missing a using directive or an assembly reference?)`   

Я знаю, что означает ошибка, я просто не знаю, как ее обойти.

Заранее спасибо.

Комментарии:

1. class TemplateClasslt;Tgt; where T : TemplateClasslt;Tgt; . Смотрите Любопытно Повторяющийся шаблон шаблона

2. @canton7 Правильно, это сработало. Удалось скомпилировать, но на самом деле еще не использовался в запущенной программе. Нужен ваш совет, замечаете ли вы какие-либо лазейки в бесконечной рекурсии в этом методе? Я чувствую, что если шаблон состоит только из методов и полей без какого-либо экземпляра объекта, это должно быть нормально.

3. Не более, чем любой другой класс, у которого есть ссылка на другой экземпляр того же времени. Такие вещи постоянно происходят, например, с деревьями и связанными списками

4. @canton7 Хорошо, большое спасибо. У меня было некоторое время, чтобы поиграть с этим, и до сих пор это работает довольно хорошо. Просто огромная потенциальная ошибка в будущем для тех, кому будет поручено поддерживать мой код. 🙂

5. Вы действительно видите эту закономерность вокруг-это не так уж неожиданно!