int i {
get{
return i;
}
set {
...
i = value;
...
}
}
В коде, указанном вами выше, вы используете то же имя свойства внутри блоков get и set.
После компиляции ваш код будет переведен на какой-то вещи, эквивалентном это:
int get_i()
{
return get_i();
}
void set_i(int value)
{
set_i(value);
}
Как вы можете видеть, каждый из них будет называть себя (рекурсия) бесконечно без каких-либо условий выхода, в результате чего в StackOverflow
исключения ,
Если у вас есть поле подкладочного к собственности, как, как и другие ответы на этот вопрос предложили, компилятор будет генерировать некоторые вещи, эквивалентные этот, которое не имеет рекурсии:
int get_i()
{
return _i; //_i is the backing field
}
void set_i(int value)
{
_i = value;
}
UPDATE:
Для полноты, я добавляю здесь способ решить вашу проблему.
int _i;
int i {
get{
return _i;
}
set {
if (value > 60) {
} else {
_i = value;
}
}
}