设置器不断递归调用自己

时间:2019-02-04 22:20:58

标签: c# .net

我正在用C#练习事件和代表。当我运行代码时,由于git,我的流程被终止,因为设置程序由于以下行而递归调用自己:

StackOverflowException

CurrentPrice = value; //inside the setter of CurrentPrice

1 个答案:

答案 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;
        }
    }

    //...
}