c# 인터페이스 관련 질문입니다.

class PriorityQueue<T> where T : IComparable<T>

{

List<T> _heap = new List<T>();

public void Push(T data)

{

_heap.Add(data);

int now = _heap.Count - 1;

while(now > 0)

{

int next = (now - 1) / 2;

if (heap[now].CompareTo(heap[next]) < 0)

break;

T temp = _heap[now];

heap[now] = heap[next];

_heap[next] = temp;

now = next;

}

}

}

위 코드에서 heap[now].CompareTo(heap[next])처럼 CompareTo()를 사용하는 부분이 잘 이해가 안 됩니다. where T : IComparable<T> 는 상속받은 게 아니라 T의 속성을 제한한 것이지 않나요? 상속받은 게 아닌데 어떻게 위처럼 사용할 수 있는 건가요? 그리고 만약 상속받은 게 맞다고 하더라도 구현부를 따로 만들어줘야 하는 것 아닌가요? 잘 이해가 안 되네요ㅠ

    아직 답변이 없어요.