Re[24]: Illusion of transparency
От: vdimas Россия  
Дата: 09.01.17 10:36
Оценка:
Здравствуйте, Qbit86, Вы писали:

V>>Так ты, действительно, не понимаешь?

Q>у тебя illusion of transparency.

Да не отмазывайся, ты накосячил в рассуждених пару постов назад, дополнительно усугубив это тем, что не обратил внимание на свой косяк даже после намёка. Неожиданно, прямо скажем.

Ты, вообще, программист или где? Сосредоточься, или не пиши.


V>>Потому что "параметрический полиморфизм" (якобы параметрический полиморфизм) для ref-типов реализован в C# именно таким образом.

V>>Т.е., нет никакого смысла опираться на некий T, потому что доступен только лишь IBarable. И вся "польза" от такого полиморфизма — в исключении проверок/приведений типов в исходнике пользователя.

Q>Во-первых, у пользователя библиотеки интерфейс IBarable может быть реализован value-типом.


Ну вот, ЧТД.
Продолжаем откровенно притормаживать.
1. Было написано (специально):

для ref-типов


2. Большинство алгоритмов даже из базовой библиотеки не работают на value-типах, кроме случаев, когда этот тип является элементом контейнера (или последовательности), т.е. кроме тех случаев, когда НИКАКИХ методов у целевого типа T не вызывается. А у тебя в примерах идёт вызов метода именно у типа Т.

Собсно, вообще таких алгоритмов мало, которые можно выразить в дотнете для value и ref-типов в генериках и они будут корректно работать в обоих случаях. Я одно время на этом собаку съел, в поисках классов таких алгоритмов, которые, таки, работают в обоих случаях и в попытках сформулировать ограничения на такие алгоритмы. А у тебя какой-то детсад прёт, сорри: "а вот бывает... а вот если...".


Q>Во-вторых, в сигнатуре динамически полиморфного метода ты можешь указать только один тип; а в констрейнтах дженерика несколько. Соответственно, пользовательская структура тоже реализует несколько интерфейсов, но без единой иерархии с одним «общим» интерфейсом.


И опять рука-лицо.
Потому что для случая дотнета это как раз абсолютно однофигственно — ты можешь ввести тот самый исскуствепнный "общий" интерфейс и выразить ограничения через него. И абсолютно ничего ни в одном месте, где будет или использована такая структура (или уже была исопльзована), не поломается и не изменится. Ни-че-го.


Q>Покажи, как на C++ будет выглядеть этот более общий вариант.


Опять и снова рука-лицо.

template<typename T>
void Foo(T * t) 
{
    IQuxable * q = t;
    IBarable * b = t;
    q->Qux();
    b->Bar(); 
}


Я же, блин, расписывал для особо одарённых:

Т.е., нет никакого смысла опираться на некий T, потому что доступен только лишь IBarable. И вся "польза" от такого полиморфизма — в исключении проверок/приведений типов в исходнике пользователя.

Т.е., С++ вариант отличается от варианта C# именно приведением типов в исходнике пользователя. Если такое приведение типов невозможно, компиляция не состоится, ву-а-ля. И Решарпер прекрасно всё подскажет даже внутри шаблона, кста.

===========
Предлагаю завязывать, бо мне уже трудно сдерживать откровенное глумление...
Столько было пафоса и такой пффф... Не могу отучить себя реагировать на такую комбинацию ))
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.