[英]Why use private property setters since member variables can be accessed directly?
在C#中,我们可以做类似的事情:
private string _myField;
public string MyProperty
{
get { return _myField; }
private set { _myField = value; }
}
在我们可以根据_myField
在类中设置_myField
在这里使用私有setter有什么好处? 我们为什么要使用MyProperty
的setter?
更新属性时,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;
}
}
使用属性访问器( get
和set
)的目的是隐藏有关如何查询或修改特定值的内部实现。 在您的情况下,setter很简单,但将来可能会变得更复杂。 通过隐藏实现,您可以最大限度地减少潜在更改的影响并保持界面简单。
现在关于你的问题:为什么使用私人二传手? 使用私有设置器的原因与一般使用设置器的原因完全相同。 在私有setter的情况下,该setter的用户是类本身的代码。 在公共设置者的情况下,用户可以是使用该类的任何人。 使用setter的优点仍然相同。
因为虽然属性往往是包装后备字段,但它们没有必要 。 属性还可以实现自定义业务逻辑(通常是某种验证或转换)并调用其他函数。 使用私有的setter会使你的代码变得更加惯用(意味着其他人会更容易理解你正在做的事情)并且更具表现力(意味着代码将会或者应该更接近地反映你想要完成的语义。私有的setter也是允许封装这个自定义逻辑,这样在逻辑发生变化或代码需要重构的情况下,只需要一个地方就可以对其进行更改。
使用setter,您可以在尝试设置它时控制该值,例如,如果您有一个想要确定其值不大于10的int。
public int MyProp
{
get { return _my_prop;}
private set {
if value > 10 {
_my_prop = 10;
}
}
}
需要属性中的私有setter才能使用包含在属性中的字段,以便直接通过其他函数,类的属性进行修改。 因此,在一个地方(属性)中,您可以设置字段的值,但是类的所有其他元素都不能直接访问您的私有字段,而是通过包装它的属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.