Что такого особенного в IComparable <> в качестве общего ограничения - PullRequest
0 голосов
/ 07 марта 2019

Предположим, у меня есть класс

Class Apple<T> where T: IComparable<int>{}

Теперь, создавая объект для Apple, я сделаю это как

Apple<int> obj = new Apple<int>();

Приведенный выше код будет работать.

Если я заменю тот же код на любой другой универсальный интерфейс, например IComparer<>, IEnumerable<> и т. Д., Создание объектов, как указано выше, не будет работать, и мы должны объявить его как

Apple<IEnumerable<int>> obj = new Apple<IEnumerable<int>>();

Почему это так? Почему способ, который я объявил для IComparable<>, работает только для него, а не для любого другого интерфейса?

1 Ответ

6 голосов
/ 07 марта 2019

Ничего особенного в IComparable<T>, но о самом T, который - в случае int - также реализуется IComparable<int>.Однако int определенно не реализует IEnumerable<int>.

Иными словами: конечно, можно сравнить каждый int с другим int.Однако вы не можете повторить и int.

...