Предлагаю расширить их синтаксис ключевыми словами getting setting setted(?) и дать доступ в них ко внутреннему полю
Будут доступны следующие паттерны
// lazy value (да, я в курсе, что есть обертки для этого)
public Value : string { getting {when (autofield == null) autofield = someLong} }
// notify
public Value : string
{
get;
setting { when (autofield != value) fireValueChanging() }
setted { when (autofield != oldvalue) fireValueChanged() }
}
// constraint
public Value : string
{
get;
setting
{
match (value)
{
| "One" | "Two" => ()
| _ => throw ArgumentException();
}
}
}
Чем не устраивает замена автосвойства на обычное: приходится открывать классу внутреннее поле, которое по ошибке может быть изменено в обход свойства.
Можно решить и макрами, но я не знаю как в них добраться до внутреннего поля и синтаксис получается не эстетичный.
Здравствуйте, Ziaw, Вы писали:
Если уж так нужен доступ ко внутреннему полю, то почему бы от поля и не отталкиваться?
К тому же никто не мешает делать так:
public X : string
{
mutable x : string;
get { штоугодно с x }
set { штоугодно с x }
}
Здравствуйте, hardcase, Вы писали:
H>Если уж так нужен доступ ко внутреннему полю, то почему бы от поля и не отталкиваться?
H>К тому же никто не мешает делать так:
Не знал про фичу
Тогда нет особой нужды в моем предложении.