Страницы

Поиск по вопросам

пятница, 9 ноября 2018 г.

StackOverflowException при использовании get/set

При обращении к полю для получения значения, для которого заданы get и set происходит многократное обращение к этому полю, в результате чего генерируется StackOverflowException. Если же сделать поле доступным, т.е. public, проблема исчезает.
class Sphere : Figure { public int radius { get { return radius; } private set { radius = value; } }
//неважный код
public Sphere(int r, double d) : base(d) { this.radius = r; } }


Ответ

У вас код:
int radius { get { return radius; } private set { radius = value; } }
при присвоении вы вызываете замкнутый цыкл, с которого невозможно выйти.(включи дебаг и понажимай F11 что бы увидеть что именно комп делает)
нужно писать
private int _radius; public int Radius { get { return _radius; } private set { _radius = value; } }
и все будет в порядке.
Как другой вариант, достаточно написать:
public int radius { get; private set;}

Комментариев нет:

Отправить комментарий