约定问题:什么时候使用 Getter/Setter 函数而不是使用属性

C 中的属性让我印象深刻

请先 登录 后评论

8 个回答

Joel Coehoorn

如果您的语言支持属性,请使用属性。

请先 登录 后评论
Sam

这都是个人喜好。当它被编译时,结果证明它是 getter/setter 函数。

我个人在设置和检索成员值时使用属性,没有任何副作用。如果检索/保存值有副作用,那么我使用一个函数。

请先 登录 后评论
Torlack

使用属性。 MS 的框架设计指南书中的一个有趣的注释是,如果您有一个属性并且需要为更复杂的 set/get 添加额外的方法,那么您应该消除该属性并只使用 get/set 方法。

请先 登录 后评论
Sean Hanley

我想说总是问自己哪个更有意义。方法往往被理解为要执行的动作,并且通常这样措辞

请先 登录 后评论
Jeffrey L Whitledge

当一个值是只写的或一次要设置多个值时(显然),我倾向于使用 setter。另外,我的直觉和您一样,是使用 getter 和 setter 作为进程可能长时间运行、产生线程或执行其他一些重要工作的信号。此外,如果 setter 在类中具有不明显的先决条件,我可能会改用 getter 或 setter,因为人们很少阅读有关属性的文档,并且属性应该在任何时候都可以访问。但即使在这些情况下,我也可能会使用一个属性,如果它可能使调用代码更好地阅读。

请先 登录 后评论
JRoppert

忘记 Getter 和 Setter 方法。只需使用属性。

值得一提的是,Properties 最终在程序集中作为 Setter 和/或 Getter 方法结束。只需一点元数据,Setter 和/或 Getter 就变成了一个属性。所以实际上,properties = setter/getter 方法。

请先 登录 后评论
Thomas Eyde

属性应该很快,因为它们有一定的承诺。它们对于数据绑定也是必需的。

而且它们应该没有副作用

请先 登录 后评论
supercat

Microsoft 的回答很好,但我会为读写属性添加更多规则(Microsoft 有时会违反这些规则,顺便说一句,这会造成很多混乱):(1) 属性设置器通常不应影响对象的可观察属性不被认为是正在设置其属性的对象的一部分; (2) 将一个属性设置为一个值,然后另一个值应该让任何受影响的对象处于相同的(可观察的)状态,就像简单地将其设置为第二个值一样; (3) 将属性设置为其 getter 返回的值应该没有可观察到的效果; (4) 一般情况下,设置一个属性不应导致任何其他读写属性发生变化,尽管它可能会改变其他只读属性(注意,大多数违反此规则的行为都会违反

请先 登录 后评论
  • 26 关注
  • 0 收藏,293 浏览
  • Haoest 提出于 2022-09-27 20:29