属性访问器/修改器(getter/setter)是强制执行可接受范围的正确位置吗? [英] Is the property accessor/mutator (getter/setter) the right place to enforce acceptable ranges?

查看:41
本文介绍了属性访问器/修改器(getter/setter)是强制执行可接受范围的正确位置吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在设置了端口号的应用中,我想将可分配给端口号的值限制为 49152 和 65535(含)之间的值.

In an app where a port number is set, I want to restrict the values assignable to the port number to those between 49152 and 65535 (inclusive).

我编写了一些测试方法来测试超出此范围的任何内容都会导致测试失败.他们确实失败了(正如预期的那样,因为代码尚未考虑到这一点).

I wrote some test methods that test that anything outside of this range causes the test to fail. They do fail (as expected, as the code does not yet take that into account).

所以我的问题是:将强制无效值的代码置于有效值的最佳位置是什么 - 在这里:

So my question is: what is the best place to put the code that forces an invalid value to a valid value - here:

public int Port
{
    get
    {
        return port;
    }
    set
    {
        port = value;
    }
}

例如:

public int Port
{
  get
  {
      return port;
   }
   set
   {
       if ((value < 49152) || (value > 65535))
       {
          value = 55555;
       }
       port = value;
    }
}

...或其他地方?

推荐答案

您可以在 setter 中放置验证逻辑,但如果验证失败,您可能应该让其他人知道.

You can put validation logic in your setter, but you should probably let somebody know if the validation fails.

即:

private static int minimumPortNumber = 49152;
private static int maximumPortNumber = 65535;

public int Port
{
  get
  {
      return port;
   }
   set
   {
       if ((value < minimumPortNumber) || (value > maximumPortNumber))
       {
           throw new ArgumentOutOfRangeException("port", string.Format("The port number is out of range. It must be between {0} and {1}", minimumPortNumber, maximumPortNumber));
       }
       port = value;
    }
}

这篇关于属性访问器/修改器(getter/setter)是强制执行可接受范围的正确位置吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆