Вы не объявили резервную переменную - вы только что получили свойство, чьи методы получения и установки называют себя. Мне не понятно , почему первая форма не поддерживается Unity - это означает, что возможно, что эквивалент также не будет поддерживаться, но в основном это так:
private ConstraintSet aValue;
public ConstraintSet a { get { return aValue; } set { aValue = value; } }
Конечно, у меня обычно было бы более условное имя, что означает, что вы можете обойтись без бита "value`:
private ConstraintSet constraints;
public ConstraintSet Constraints
{
get { return constraints; }
set { constraints = value; }
}
Чтобы немного подробнее объяснить, почему ваша текущая вторая форма выдает StackOverflowException
, вы всегда должны помнить, что свойства в основном являются скрытыми методами. Ваш неработающий код выглядит так:
public ConstraintSet get_a()
{
return get_a();
}
public void set_a(ConstraintSet value)
{
set_a(value);
}
Надеюсь, очевидно, почему эта версия взорвала стек. Измененная версия просто устанавливает переменную вместо того, чтобы снова вызывать свойство, поэтому при раскрытии она выглядит следующим образом:
private ConstraintSet aValue;
public ConstraintSet get_a()
{
return aValue;
}
public void set_a(ConstraintSet value)
{
aValue = value;
}