私人二传手?

时间:2014-01-01 20:29:22

标签: c# .net properties private-members

我想知道的是,当我们可以直接将值分配给私有对象时,为什么我们需要私有的setter?请考虑以下代码:

private int counter = 0;
public int Counter {
    get {
        return counter;
    }
}

在上面的上下文中,我没有看到私有setter(Counter = 1)与直接将值分配给私有对象(counter = 1)之间的区别。

我可以考虑使用私有设置器的唯一原因是需要触发更改通知/事件。除此之外,我们甚至还需要私人制定者吗?

3 个答案:

答案 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方法中可能没有任何意义。