在 C# 中,我们可以执行以下操作:
private string _myField;
public string MyProperty
{
get { return _myField; }
private set { _myField = value; }
}
在这里的属性中使用私有设置器有什么好处,而我们可以根据_myField
需要在类中设置?为什么我们要使用 setter MyProperty
?
在 C# 中,我们可以执行以下操作:
private string _myField;
public string MyProperty
{
get { return _myField; }
private set { _myField = value; }
}
在这里的属性中使用私有设置器有什么好处,而我们可以根据_myField
需要在类中设置?为什么我们要使用 setter MyProperty
?
当属性更新时,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,您可以在尝试设置它时控制该值,例如,如果您有一个 int,您希望确保它的值不大于 10。
public int MyProp
{
get { return _my_prop;}
private set {
if value > 10 {
_my_prop = 10;
}
}
}
需要在属性中使用私有设置器是使用包装在属性中的字段仅用于由其他函数直接修改,您的类的属性。因此,在一个地方(属性),您设置了字段的值,但类的所有其他元素不必直接访问您的私有字段,而是通过包装它的属性。