我想知道的是,当我们可以直接将值分配给私有对象时,为什么我们需要私有的setter?请考虑以下代码:
private int counter = 0;
public int Counter {
get {
return counter;
}
}
在上面的上下文中,我没有看到私有setter(Counter = 1)与直接将值分配给私有对象(counter = 1)之间的区别。
我可以考虑使用私有设置器的唯一原因是需要触发更改通知/事件。除此之外,我们甚至还需要私人制定者吗?
答案 0 :(得分:8)
如果您使用自动属性,则看不到背景字段:
public int Counter { get; private set; }
这允许您将set设置为private,将get设置为public,而无需自己编写支持字段。
即使您使用的是支持字段,有时您仍想使用该属性,而不是字段。属性设置器实际上可以包含可能适合调用的其他逻辑(验证/更改通知/等),但您可能希望限制对您的类的访问权限。
答案 1 :(得分:4)
使用属性而不是私有变量是访问它的更好方法,即使它来自同一个类,因此如果你在setter中有一些逻辑,那么每次设置值时都不必重复它。即使您没有逻辑,也可以使用属性,因为将来可能需要添加一些逻辑。它将是设置值的单一入口点。
使用自动实现的属性,您不需要定义私有变量,因此也可以使用它。
private int counter = 0;
public int Counter {
get {
return counter;
}
private set {
if(value > 0)
{
counter = value;
}
}
}
答案 2 :(得分:0)
getter和setter通常是公共的,并限制其他类如何使用该变量。
Getters和setter通常包含在更改其值时应用的逻辑。防止无效的分配,触发事件,这种事情。因此,如果只在同一个类中更改变量,那么编写私有setter肯定是有用的。如果您只想进行简单的更改,例如X ++或x = what,那么私有setter方法中可能没有任何意义。