我正在用C#练习事件和代表。当我运行代码时,由于git
,我的流程被终止,因为设置程序由于以下行而递归调用自己:
StackOverflowException
CurrentPrice = value; //inside the setter of CurrentPrice
答案 0 :(得分:4)
如果您的代码大于getter或setter的最小值,则需要为属性设置 backing字段:
private int _currentPrice;
public int CurrentPrice
{
get
{
return _currentPrice;
}
set
{
if (Counter > 0) // that is when we are not using the constructor
{
CallPriceChanger(this);
}
_currentPrice = value;
++Counter;
}
}
您可以进一步使用backing字段来简化代码,构造函数现在可以直接设置backing字段,而您完全不需要Counter
值。
public class PriceChangingEvent : EventArgs
{
public PriceChangingEvent(int currentprice, int newprice)
{
_currentPrice = currentprice;
NewPrice = newprice;
}
private int _currentPrice;
public int CurrentPrice
{
get
{
return _currentPrice;
}
set
{
CallPriceChanger(this);
_currentPrice = value;
}
}
//...
}