Re[5]: x.Equals(y)
От: vdimas Россия  
Дата: 11.01.17 02:57
Оценка: -1
Здравствуйте, 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-го ранга, в отличие от того же Хаскеля, который ровно в этих же сценариях ресолвит всё статически. В общем, добро пожаловать в реальный мир, Нео.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.