【发布时间】:2011-03-16 06:14:14
【问题描述】:
我们什么时候应该在 C# 中使用 get 和 set 属性?
【问题讨论】:
-
user544079 - 我相信你来自 Java 背景。 Cody 的回答总结了 C# 的方法。
标签: c#
我们什么时候应该在 C# 中使用 get 和 set 属性?
【问题讨论】:
标签: c#
Properties 如果您决定需要 get 和 set 方法,那么您可能正在寻找。关于为什么要使用属性以及为什么不想使用属性的体面讨论,请查看 Jon Skeet 的 Why Properties Matter。
使用属性而不是仅仅公开内部类数据的一个很好的理由显然是保护这些数据。您可以控制对单个属性的访问以及验证正在设置的数据。您还可以实现计算属性来计算值,对于您的类的用户来说,这与任何其他属性没有什么不同。
【讨论】:
根据 MSDN 上的Property Usage Guidelines:
当成员是逻辑数据成员时使用属性。在以下成员声明中,Name 是一个属性,因为它是类的逻辑成员。
在以下情况下使用方法:
- 操作为转换,如
Object.ToString。- 该操作的开销太大,以至于您想与用户沟通,让他们考虑缓存结果。
- 使用 get 访问器获取属性值会产生可观察到的副作用。
- 连续两次呼叫成员会产生不同的结果。
- 执行顺序很重要。请注意,类型的属性应该能够以任何顺序设置和检索。
- 成员是静态的,但返回一个可以更改的值。
- 该成员返回一个数组。返回数组的属性可能非常具有误导性。通常需要返回内部数组的副本,以便用户无法更改内部状态。再加上用户可以很容易地假设它是索引属性这一事实,导致代码效率低下。在下面的代码示例中,每次调用 Methods 属性都会创建一个数组副本。因此,将在以下循环中创建 2n+1 个数组副本。
【讨论】:
您想要使用属性而不是 Get/Set 方法的原因有两个(广义地说):
【讨论】: