c# - 为什么是私有(private)二传手?

标签 c# .net properties private-members

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

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

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

我考虑使用私有(private) setter 的唯一原因是需要触发更改通知/事件时。除此之外,我们甚至还需要一个私有(private) setter 吗?

最佳答案

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

public int Counter { get; private set; }

这使您可以将它设为 private for set 和 public for get,而无需自己编写支持字段。

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

关于c# - 为什么是私有(private)二传手?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20872926/

相关文章:

c# - 在 WebKit.NET 上获取 HTTP header

matlab - 将 containers.Map 作为类属性时奇怪的 MATLAB 行为

c# - 单元测试时使用反射或属性?

c# - 使用 Control+Plus 的快捷方式创建 MenuItem – 使用反射修改 MenuItem 的私有(private)字段是最好的方法吗?

C#: yield 返回范围/集合

c# - 对 EF-to-Linq 查询进行排序的最快方法是什么?

c# - 声音频率检测?

c# - 使用错误行号在 XSD 上验证 XML

c# - MEF 和 DirectoryCatalog

PHP 扩展类使子级继承相同的静态属性