实例化时出现StackOverflow错误

poi*_*ing 5 c# stack-overflow instantiation

每当我在C#中实例化这个类时,我都会收到StackOverflow错误.有谁能解释为什么?

class Money
{
    public Money(decimal value, Currency usedCurrency)
    {
        Value = value;
        UsedCurrency = usedCurrency;
    }

    public decimal Value
    {
        get { return Value; }
        set { Value = Math.Round(value, 2, MidpointRounding.ToEven); }
    }

    public Currency UsedCurrency;
}

public enum Currency
{
    USD,
    EUR,
    GBP,
    CAD,
    AUD
}
Run Code Online (Sandbox Code Playgroud)

这是一个实例化示例:

var money = new Money(100, Currency.USD);
Run Code Online (Sandbox Code Playgroud)

Gra*_*ICA 14

您的财产正在引用自己.当你试图获得时Value,它指的是Value...试图Value再次......并且继续.

public decimal Value
{
    get { return Value; }
    set { Value = Math.Round(value, 2, MidpointRounding.ToEven); }
}
Run Code Online (Sandbox Code Playgroud)

使用支持字段.(另外,我会将你的财产重命名为更有意义的东西,特别是因为value它具有特殊意义.)

private decimal roundedCurrency;
public decimal RoundedCurrency
{
    get { return roundedCurrency; }
    set { roundedCurrency = Math.Round(value, 2, MidpointRounding.ToEven); }
}
Run Code Online (Sandbox Code Playgroud)


Hab*_*bib 5

您需要为您的财产提供支持字段Value.在您当前的代码中,get/set属性正在尝试设置属性,从而引入递归调用和Stackoverflow异常.

private decimal _Value;

public decimal Value
{
    get { return _Value; }
    set { _Value = Math.Round(value, 2, MidpointRounding.ToEven); }
}
Run Code Online (Sandbox Code Playgroud)