C# 实例化时发生StackOverflow错误

C# 实例化时发生StackOverflow错误,c#,stack-overflow,instantiation,C#,Stack Overflow,Instantiation,每当我在C#中实例化这个类时,就会出现StackOverflow错误。 有人能解释为什么吗 class Money { public Money(decimal value, Currency usedCurrency) { Value = value; UsedCurrency = usedCurrency; } public decimal Value { get { return Value; }

每当我在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
}
下面是一个实例化示例:

var money = new Money(100, Currency.USD);

您的属性
需要一个支持字段。在当前代码中,属性的
get/set
正在尝试设置属性,从而引入递归调用和
Stackoverflow
异常

private decimal _Value;

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

您的属性正在引用自身。当您试图获取
时,它指的是
。。。它试图再次获取
。。。不断地

public decimal Value
{
    get { return Value; }
    set { Value = Math.Round(value, 2, MidpointRounding.ToEven); }
}
使用支持字段。(另外,我会将您的属性重命名为更有意义的名称,特别是因为
value
具有特殊意义。)

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