Здравствуйте, artelk, Вы писали:
A>>>На сколько понимаю, init — это compiletime сущность, для рантайма он работает как обычный set, нет?
НС>>Нет. init добавляет модификатор readonly на backing field
A>А мог бы и не добавлять, например.
Но он добавляет. К чему ты это написал?
A>>>Десериализаторы используют рефлексию, они и не заметят, что там init вместо set.
НС>>Нормальные десериализаторы используют кодогенерацию и она совершенно точно обломается на readonly полях.
A>Т.е. когда в язык вводили init-only свойства вопрос "а как же десериализаторы" отметался, а когда вводили рекорды он вдруг стал актуальным, так что-ли?
Ничего не понял. Какое отношение к добавлению этой механики имеет наличие возможности делать set поля в рекордах?
A>Напомню: обе фичи добавляются в язык одновременно.
И?
A>Если уж начали делать кодогенерацию, то проблему десериализаторов (и более общую) могли бы, например, решить классическим образом: сгенерировать вложенный класс Builder, в котором все свойства имеют сеттер. Десериализацию будет нужно делать в него и потом из него получать инстанс рекорда.
И все ради того что кому то не понравилась возможность сделать мутабельным рекорды?
A>Другой вариант: не ставить readonly на backing field.
Ну пипец просто. Ради того чтобы не дать сделать мутабельность надо добавить возможность мутабельности любым свойствам безусловно. Абсурд на марше.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>