私人二传手?

use*_*346 2 .net c# properties private-members

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

private int counter = 0;
public int Counter {
    get {
        return counter;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

Ree*_*sey 8

如果使用自动属性,则看不到背景字段:

public int Counter { get; private set; }
Run Code Online (Sandbox Code Playgroud)

这允许您将set设置为private,将get设置为public,而无需自己编写支持字段.

即使您使用的是支持字段,有时您仍希望仍然使用该属性,而不是字段.属性设置器实际上可以包含可能适合调用的其他逻辑(验证/更改通知/等),但您可能希望将对此的访问权限限制为您的类.