[Record]
class AB2
{
A : int { get; private set; }
B : string { get; private set; }
}
[Record]
class AB3
{
A : int { get; }
B : string { get; }
}
AB1 и AB2 компилируются, но в первом варианте нет свойства set, а во втором есть.
Третий вариант явно показывает что нужно, но не компилируется.
Есть ли возможность добавить его ?
Здравствуйте, Don Reba, Вы писали:
DR>Здравствуйте, _nn_, Вы писали:
__>>AB1 и AB2 компилируются, но в первом варианте нет свойства set, а во втором есть.
DR>Если нужен set, то пишется:
Как раз наоборот, нужно без set вообще. Только get.
Здравствуйте, hardcase, Вы писали:
H>Здравствуйте, _nn_, Вы писали:
__>>Было бы более ясным ввести автоматические свойства только для чтения и тогда код мог бы выглядеть так: __>>
__>>[Record]
__>>class AB3
__>>{
__>> A : int { get; }
__>> B : string { get; }
__>>}
__>>
H>Т.е. предлагаешь генерировать поле даже для неабстрактных свойств с единственным пустым get-тером? H>А как их называть?
Также и называть, добавляя подчеркивание и начиная с маленькой буквы.
Обычно код получается или через autoproperty — public A : int { get; set; } и тут без разницы как называется поле или делается поле _someName и public A : int { get { _someName } } и тут тоже особо без разницы как поле называется.
Это очень удобно для неизменяемых классов, код короче и понятней.
Здравствуйте, _nn_, Вы писали:
H>>А как же тогда установить начальное значение?
__>Для этого и есть Record.
Ты разберись все же что к чему.
Record создает конструктор для полей типа. Поля могут быть заданы явно или созданы автоматически при использовании автосвойсвт (ну, или другими макросами, но этот случай сейчас не рассматривается).
__>Было бы более ясным ввести автоматические свойства только для чтения и тогда код мог бы выглядеть так: __>
__>[Record]
__>class AB3
__>{
__> A : int { get; }
__> B : string { get; }
__>}
__>
Это бессмысленный код. Хочешь иметь неизменяемые поля и эксесоры к ним — используй метатрибут Accessor.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, hardcase, Вы писали:
H>Смысл все же есть, но вот старик Оккам был бы недоволен.
И в чем этот смысл?
Мне вообще не нравится что побочные эффекты работы одного макроса влияют на функциональность другой фичи языка.
Ведь если реализовать данное сомнительное новшество, то окажется, что использовать его без макроса Record попросту невозможно, так как поля генерируемые для автосвойств в гражданском коде недоступны (в следствии авлфа-переименования).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.