【问题标题】:How to limit property setter to NOT receive values below zero?如何限制属性设置器不接收低于零的值?
【发布时间】:2014-11-20 03:58:02
【问题描述】:

我正在做作业,但我被困在一个属性上,我需要做的就是不接收负值。

我有这个属性的代码。如何设置setter不让用户设置负值?

     public decimal Balance 
        { 
        get {return balance;}
        private set{ if (value >= 0) 
        {
            balance = value;
        }else if (value < 0)
        {
           ??????
        }
        }
    }        

这是我的 Main() 方法:

  static void Main(string[] args)
    {
        BankAccountClass firstAccount = new BankAccountClass();
        int userInputAccountNumber = int.Parse(Console.ReadLine());
        firstAccount.addAccountNumber(userInputAccountNumber);

        Console.WriteLine(firstAccount.AccountNumber);


    }

【问题讨论】:

  • 恕我直言,最好只在属性访问器中执行琐碎的任务,非琐碎任务(例如检查空值)更适合在将空值分配给属性之前检查空值的方法。
  • 我是用方法做的,但是老师说方法不对。在整个网络上,用户都在说最好使用一种方法。
  • 讲师讲授理论,该领域的专业人士讲授实用性/可读性/可维护性/常识...考虑msdn.microsoft.com/en-gb/library/w86s7x04.aspx有一个if语句,但是如果将月份设置为13...没什么...好吧,那是裤子...如果它是 13(或在您的情况下为 null),您总是想做某事,并且属性的特殊方法访问器不是最好的地方。
  • 还要考虑当一个属性是非虚拟的并且只包含少量代码时,执行环境可以用访问器的实际代码替换对访问器的调用。此过程称为内联,它使属性访问与字段访问一样高效,同时保留了属性增加的灵活性。

标签: c# oop properties


【解决方案1】:

您可能应该抛出 ArgumentOutOfRangeException:

 public decimal Balance 
 { 
    get { return balance; }
    private set
    {
       if (value < 0)
          throw new ArgumentOutOfRangeException("Only positive values are allowed");

       balance = value;
    }
}   

但也可以选择默认为 0 或什么都不做,具体取决于具体要求。

【讨论】:

    【解决方案2】:
    public decimal Balance 
    { 
        get {return balance;}
        private set
        { 
            if (value >= 0) 
            {
                balance = value;
            }
        }
    

    如果 value 小于 0,则什么也不做,或者抛出 ArgumentException

    【讨论】:

      【解决方案3】:

      你可以直接从 setter 返回(你不需要处理它),或者如果你想处理它,抛出一个异常。

      【讨论】:

      • 只是在更深层次上考虑这个... '平衡'。他们添加和删除确定余额的金额。因此,在这种情况下,更好的设计是只使用 getter,并使用会影响私人余额金额的 Add 和 Subtract 方法。
      猜你喜欢
      • 1970-01-01
      • 2020-07-29
      • 1970-01-01
      • 1970-01-01
      • 2018-08-20
      • 2016-03-25
      • 2023-03-30
      • 2015-02-10
      • 2021-05-28
      相关资源
      最近更新 更多