从类内部访问类成员

本文关键字:成员 访问 内部 | 更新日期: 2023-09-27 18:08:33

当从类中访问属性时,应该使用私有成员变量还是公共属性?

从类内部访问类成员

实际上这个问题的答案,但我认为只有问另一个问题才能得到答案:

我是否从使用变量或属性中获得所需的行为?

属性通常对数据执行操作,这意味着您可能不会从一个属性到另一个属性获得完全相同的值。一般来说,它们不会做任何"昂贵"的事情,也不会产生在类的其他微妙相关元素中表现出来的副作用(属性不应该这样做),但属性的好处之一是有一个"掩码",可以这么说,提供所需的获取设置行为,这与直接返回或赋值不同,其中变量是原始的,纯净的数据-这是你需要注意的。

例如,您可能会发现X 的属性从不返回null,但底层变量可以是,有时 null -在这种情况下,您的操作可能依赖于检查null,而属性向外部暴露了一个"安全赌注"。因此,在这种特殊情况下,您必须处理底层元素。

显然,您应该在实践中争取一些一致性模型,但以上是原则,实践主要是针对每个解决方案,项目,甚至类!

如果它是一个有setter的公共属性,我会使用它(在其他条件相同的情况下)

一般来说,当有一个属性本身也引用私有变量时,从类中使用私有变量。它是一个实现细节。该属性的目的是具有稳定的向外界面。

但是,如果你的属性确实做了一些你依赖的聪明的事情(比如依赖属性),你可以选择总是使用这个属性来重用这种聪明。

至少,你所做的是顺次的,当然是在一个类的范围内,为了你的实现是可理解和可维护的。

在大多数情况下-访问私有字段。

在MVVM视图模型中,或任何其他实现INotifyPropertyChanged的类(或类似的情况,当上下文需要时),您应该访问公共属性,以通知订阅者关于值更改。

取决于属性中是否有任何逻辑:就像验证setter中的输入一样,或者在获取。

时返回标准值或类似的值。

对于这些参数,我建议使用属性。和以往一样,明智地使用私有/公共资源