путают с

#c# #generics

Вопрос:

посмотрел учебник от себастьяна лаге по исправлению пути.и пример кода

 public class Heaplt;Tgt; where T : HeapIndexlt;Tgt; {  } public interface HeapIndexlt;Tgt; : IComparablelt;Tgt; {  int IndexHeap  {  get;  set;  } } public class Node : HeapIndexlt;Nodegt;  {  public int IndexHeap { get; set; }   public int CompareTo([AllowNull] Node other)  {  return IndexHeap.CompareTo(other.IndexHeap);  } }  

и Heaplt;Nodegt; heapNode = new Heaplt;Nodegt;(); всю свою работу. я начинаю читать для и я в замешательстве. почему я не могу поступить таким образом

 public class NodeInt : HeapIndexlt;intgt; {  public int IndexHeap { get; set; }   public int CompareTo([AllowNull] int other)  {  return IndexHeap.CompareTo(other);  } }  NodeInt nd = new NodeInt();  HeapIndexlt;NodeIntgt; hpD = nd as HeapIndexlt;NodeIntgt;;  Heaplt;NodeIntgt; heapInt = hpD as Heaplt;NodeIntgt;;  

потому что это не работает Heaplt;NodeIntgt; heapNodeInt = new Heaplt;NodeIntgt;(); Я, наверное, просто не до конца понял, и у меня ужасно помутилось в глазах. но я думал, что его код работает, любой экземпляр, отвечающий требованию, где T является реализацией интерфейса, тогда вы можете использовать его для создания кучи , почему я не могу просто Heaplt;NodeIntgt; heapNodeInt = new Heaplt;NodeIntgt;();

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

1. Существует ограничение на то, чтобы T было a HeapIndexlt;Tgt; . Heaplt;Nodegt; все в порядке, потому Node что реализует HeapIndexlt;Nodegt; . Если хотите Heaplt;NodeIntgt; , то NodeInt должны реализовать HeapIndexlt;NodeIntgt;

Ответ №1:

Heaplt;Tgt; where T : HeapIndexlt;Tgt; означает , что если вы хотите Heaplt;NodeIntgt; , то NodeInt должны наследовать HeapIndexlt;NodeIntgt; только потому T = NodeInt , что в Heap объявлении. Но ваш NodeInt есть HeapIndexlt;intgt; , поэтому он не соответствует требованиям, и этот код не будет компилироваться.

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

1. спасибо, что утром меня поняли более четко