繁体   English   中英

如何确保依赖于其他人的财产价值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM