[英]How do I ensure the value of property for others that are dependent upon it?
我有这样的房产:
private Decimal _payout;
public Decimal PayoutValue
{
get { return _payout; }
set
{
_payout = value;
//second part of following conditional is an enum
if (Math.Abs(value) > 1 && this.PayoutType == CutType.Percent)
{
_payout /= 100;
}
}
}
如您所见,它取决于PayoutType
的值,它只是一个简单的枚举属性:
public CutType PayoutType { get; set; }
我的问题是PayoutType
似乎没有在PayoutValue
设置之前设置,所以下面的条件永远不会成立。 如何强制PayoutType
之前设置PayoutValue
评价?
谢谢。
更新感谢您的回答。 我想我应该提到大多数时候这个对象是通过DataContexts绑定的,还是来自客户端(MVC项目)的Http.Post绑定,所以我真的没有任何构造函数。 还有其他方式,还是我应该开始用我的编程创作?
在评估PayoutValue之前,如何强制设置PayoutType?
把它放在构造函数中。 这是执行此规则的唯一方法。
话虽如此,我建议不要这样做,至少在上面的实现中。 您当前的属性实现将非常非常混淆用户。 人们倾向于期望设置属性,然后立即获取它将提供相同的值。
在你的情况下,但是:
decimal value = 45.3;
myObject.PayoutValue = value; // Set this
if (myObject.PayoutValue != value)
{
// This would normally be a very unexpected case! In your example, it will always be true!
}
最好是潜在地使用两个属性或一个方法(即: SetPayoutValue(decimal value)
)来使用户知道它不像一个简单的属性。
这个怎么样 ?
get
{
if (Math.Abs(value) > 1 && this.PayoutType == CutType.Percent)
{
return _payout /100;
}
return _payout;
}
set{_payout = value;}
这样您就不会更改已设置的值。
所有“必需”属性都应该在您的类的构造函数中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.