Здравствуйте, Qbit86, Вы писали:
V>>У тебя по ссылке 4 места с x.Equals(y), например такое:
V>>internal sealed class ObjectEqualityComparer<T>: EqualityComparer<T>
Q>Не паясничай, речь шлаАвтор: Qbit86
Дата: 10.01.17
про `GenericEqualityComparer<T>`:
Который не умеет вызывать operator==? ))
А почему бы мне не было дать тебе понять, что ты явно поторопился рассуждать о каких-то там юниорах, после вот этого:
Даже если у тебя будет констрейн where T : IBarable<T> — я уверен, ты сам сможешь доработать мой сниппет до такого сценария.
Т.е., следующий твой шаг в рассуждениях от T к ISomeInterface<T> был слишком очевидным на тот момент, что я заранее попытался тебя попросить не рвать жилы в эту сторону, бо там там преимуществ перед С++ тоже не найдёшь, а, ровно наоборот — обнять и плакать. ))
Ан нет, до тебя даже такой толстый намёк не дошёл.
Q>Навскидку, есть такой класс:
Q>
internal class GenericEqualityComparer<T>: EqualityComparer<T> where T: IEquatable<T>
Ну и?
Ты ведь вызвался оспорить вот это:
Собсно, вообще таких алгоритмов мало, которые можно выразить в дотнете для value и ref-типов в генериках и они будут корректно работать в обоих случаях.
Ну как, получилось?
Разве ты еще не увидел, что твой пример был неудачный? Что сам вот этот код — это workaround вокруг тривиальных в других языках вещей?
Что это не целевой ни разу код, а тупо костыль, "восполнение пробела"?
Что базовые типы засоряются реализацией тонны методов прямо в метаинформации и в байт-коде?
И что выделенное ключевое слово — это ошибка дизайна?
Что надо было дать некий struct ValueTypeComparer<T> как минимум, потому что иначе ЛЮБОЕ сравнение, сцуко, всё-равно будет происходить через метод интерфейса, т.е. никакой нафик параметрический полиморфизм толком не будет работать — будет голая динамика плюс эдакий синтаксический сахар.
Что даже указанный тобой "типизированный" вызов x.Equals(y) происходит внутри генерик-метода, реализующего интерфейс? (что ты скромно делаешь вид, что не замечаешь или подзабыл, угу)
Ну и возвращаясь к нашим баранам. Вот, если быть честным с самим собой (забыть на минуту о запале форумного боя), ты что, ДЕЙСТВИТЕЛЬНО не согласен с процитированным (последнее на жёлтеньком)?
А то ж, если будешь продолжать упираться, то уже мне придется шутить о соответствии хотя бы джуниору, только, в отличие от, с полным основанием-то. ))
Не хочешь на досуге помедитировать над вот этой
сладкой парочкой, кста? Очень рекомендую к ознакомлению. Это именно то, как решаются реальные проблемы (С) при наличии, казалось бы, рекламируемого тобой якобы "параметрического полиморфизма" в C#. Весь код по ссылке именно таков как раз от того, что дотнетный якобы "параметрический полиморфизм" не в состоянии разресолвится статически, исключив динамику интерфейсных вызовов, потому что не реализует статически даже полиморфизм 1-го ранга, в отличие от того же Хаскеля, который ровно в этих же сценариях ресолвит всё статически. В общем, добро пожаловать в реальный мир, Нео.