Возможно, этот вопрос звучит глупо, но почему существует generic и non-genericIComparable
интерфейс существует?Почему существует общий и не общий интерфейс IComparable?
Кроме того, какой из них предпочитают использовать и почему?
Возможно, этот вопрос звучит глупо, но почему существует generic и non-genericIComparable
интерфейс существует?Почему существует общий и не общий интерфейс IComparable?
Кроме того, какой из них предпочитают использовать и почему?
Неожиданный IComparable
был добавлен в версию 1.1 до введения дженериков, а IComparer<T>
был добавлен вместе с генериками в версии 2.0.
Общая версия предпочтительна по той же причине, что и все общие интерфейсы - она безопаснее и документирует намерение более четко. Типы Struct также не обязательно должны быть помещены в коробку при передаче в общий метод, поскольку они были бы для одного с аргументом object
, например IComparable.CompareTo
, так что также есть преимущество в производительности.
спасибо. Не-универсальная версия не была удалена из-за соображений совместимости, я думаю? –
_And_, если он используется против 'struct', он пройдет его без бокса. –
@JohnThreepwood Справа: не было причин активно * ломать * разработчиков, которые использовали не общий интерфейс. Разумеется, они могли свободно обновляться на досуге. – dlev