使只读属性可设置
本文关键字:设置 只读属性 | 更新日期: 2023-09-27 18:14:55
基本上,我在这个类上遇到了一些readonly
属性该类的作者告诉我,我可以为特定的任务设置。问题是,它们的值大多是通过操作获得的,而不是直接从类中的私有变量获得的。
的例子:
public decimal? AccruedInterest
{
get
{
if (this.Result != null)
{
return this.GetExchangedCurrencyValue(this.Result.AccruedInterest.GetValueOrDefault(decimal.Zero));
}
return null;
}
}
如果我想添加一个setter,我不需要担心Result
对象的设置因为我不确定它返回时是否能正确绘制
我能做这样的事情吗?
private decimal? _AccruedInterest;
public decimal? AccruedInterest
{
get
{
if (this._AccruedInterest.HasValue)
{
return this._AccruedInterest.Value;
}
if (this.Result != null)
{
return this.GetExchangedCurrencyValue(this.Result.AccruedInterest.GetValueOrDefault(decimal.Zero));
}
return null;
}
set
{
this._AccruedInterest = value;
}
}
或者你们中有人看到可能由此产生的问题吗(除了它现在是可更改的事实之外)?
那么你唯一的问题是,如果他们设置值为null,你希望你的属性返回null,而不是评估if语句。
但是您可能不允许它们设置null,在这种情况下,您应该在setter中添加一个检查。
set
{
if (value == null)
throw new NullArgumentException("AccruedInterest");
this._AccruedInterest = value;
}
如果设置null是有效的,你可能需要另一个布尔标志来判断值是否已经设置。
private bool _accruedInterestSet;
private decimal? _accruedInterest;
public decimal? AccruedInterest
{
get
{
if (this._accruedInterestSet)
{
return this._accruedInterest; //don't return .Value in case they set null
}
if (this.Result != null)
{
return this.GetExchangedCurrencyValue(this.Result.AccruedInterest.GetValueOrDefault(decimal.Zero)) ;
}
return null;
}
set
{
this._accruedInterestSet = true;
this._AccruedInterest = value;
}
}
我不知道它应该如何工作,但语法上我没有看到你的代码有任何问题。