为什么使用私有属性setter,因为成员变量可以直接访问?

hat*_*enn 6 c# field properties

在C#中,我们可以做类似的事情:

private string _myField;

public string MyProperty
{
    get { return _myField; }
    private set { _myField = value; }
}
Run Code Online (Sandbox Code Playgroud)

在我们可以根据需要_myField在类中设置私有setter的优势是什么?我们为什么要使用setter MyProperty

ron*_*chn 7

更新属性时,setter可以实现其他行为/逻辑,因此您不必在可能更新属性的每个位置手动实现它.

它可以:

  • 自动更新其他字段
  • 验证新值(例如,确保电子邮件地址与正则表达式匹配)
  • 每次在一个地方更新字段时,保留需要运行的代码

例如:

private string _myField;
private int _myField_num_updated;
private DateTime _myField_updated_at;

public string MyProperty
{
    get { return _myField; }
    private set {
      _myField = value;
      _myField_num_updated++;
      _myField_updated_at = DateTime.Now;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 通常,您假设一个类可以信任自己,因为如果您正在实现该类,您可能知道自己在做什么.这与使用你的课程的其他程序员相反,可能并不确切知道他们在做什么. (3认同)

Rei*_*eek 5

使用属性访问器(getset)的目的是隐藏有关如何查询或修改特定值的内部实现.在您的情况下,setter很简单,但将来可能会变得更复杂.通过隐藏实现,您可以最大限度地减少潜在更改的影响并保持界面简单.

现在关于你的问题:为什么使用私人二传手?使用私有设置器的原因与一般使用设置器的原因完全相同.在私有setter的情况下,该setter的用户是类本身的代码.在公共设置者的情况下,用户可以是使用该类的任何人.使用setter的优点仍然相同.