Re[32]: Welcome to C# 9.0
От: Ночной Смотрящий Россия  
Дата: 17.09.20 14:05
Оценка:
Здравствуйте, 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>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.