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)
您需要为您的财产提供支持字段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)
归档时间: |
|
查看次数: |
137 次 |
最近记录: |