Здравствуйте, Sinclair, Вы писали:
S>Отсутствие наследования означает, что код можно делать очень эффективным — например, везде, где мы используем структуру хоть бы и по ссылке, нам известен точный тип.
Запретить виртуальные методы для структур?
А при боксировании поданной по ссылке структуры боксировать только поданную "часть" структуры.
S>Частным случаем является многократно упомянутый в этой же дискуссии трюк с параметризацией генерика структурным типом, ограниченным интерфейсом.
Там все-равно уникальный код под структуру генерится джитом.
Кстате, и тут АОТ может помочь, бо если две структуры имеют одинаковый лейаут и функциональность, то и сгенерённый код под них мог бы бы одинаковый.
Например, как все инстансы Pointer<T>.
S>Таким образом, имеем полиморфизм без штрафов к производительности.
До боксирования там, считай, compile-time полиморфизм.
S>>Хотя всегда можно сделать структуру с полем наследуемой структуры и нагенерить свойства и методы над наследуемой структурой с помощью того же source generator S>Так сделать можно, но нельзя будет передать ref Descendant в параметр, где ожидается ref Parent.
Именно.
Хотя, при передаче по-значению можно выкрутиться через implicit-оператор приведения типа.