【问题标题】:When to use get and set properties in C#何时在 C# 中使用 get 和 set 属性
【发布时间】:2011-03-16 06:14:14
【问题描述】:

我们什么时候应该在 C# 中使用 get 和 set 属性?

【问题讨论】:

标签: c#


【解决方案1】:

Properties 如果您决定需要 get 和 set 方法,那么您可能正在寻找。关于为什么要使用属性以及为什么不想使用属性的体面讨论,请查看 Jon Skeet 的 Why Properties Matter

使用属性而不是仅仅公开内部类数据的一个很好的理由显然是保护这些数据。您可以控制对单个属性的访问以及验证正在设置的数据。您还可以实现计算属性来计算值,对于您的类的用户来说,这与任何其他属性没有什么不同。

【讨论】:

  • 属性是 OP 的意思。
  • 请注意,您不能创建带参数的属性,因此您可能需要 Get 方法,而不是带有 getter 的属性。
  • @Robert 我现在明白了,添加了第二段来回答该特定问题。
【解决方案2】:

根据 MSDN 上的Property Usage Guidelines

  • 当成员是逻辑数据成员时使用属性。在以下成员声明中,Name 是一个属性,因为它是类的逻辑成员。

  • 在以下情况下使用方法:

    • 操作为转换,如Object.ToString
    • 该操作的开销太大,以至于您想与用户沟通,让他们考虑缓存结果。
    • 使用 get 访问器获取属性值会产生可观察到的副作用。
    • 连续两次呼叫成员会产生不同的结果。
    • 执行顺序很重要。请注意,类型的属性应该能够以任何顺序设置和检索。
    • 成员是静态的,但返回一个可以更改的值。
    • 该成员返回一个数组。返回数组的属性可能非常具有误导性。通常需要返回内部数组的副本,以便用户无法更改内部状态。再加上用户可以很容易地假设它是索引属性这一事实,导致代码效率低下。在下面的代码示例中,每次调用 Methods 属性都会创建一个数组副本。因此,将在以下循环中创建 2n+1 个数组副本。

【讨论】:

  • 我了解属性,但不是这个答案...我发现科迪的答案中提到的Jon Skeet 更具可读性。
  • @KMC 我同意,Skeet 先生是一个比一般 MSDN 页面更好的老师/沟通者。
【解决方案3】:

您想要使用属性而不是 Get/Set 方法的原因有两个(广义地说):

  1. 您希望字段简洁,但希望授予对“外部”的只读访问权限,同时授予对“内部”的读写访问权限。
  2. 您想要一个领域的简洁性和内涵,同时能够秘密地执行或操纵引擎盖下的事物,例如:
    1. 要求某个范围内的值(在设置期间)。
    2. 自动清理或限制某些值(在设置期间)。
    3. 更新(或推迟更新)其他相关数据(在设置期间)。
    4. 避免对该字段进行必要的完整计算,直到实际使用该字段(在获取期间)。
    5. 其他任何您需要放在适当方法中但如果外部世界仍将其视为字段时更喜欢的其他内容。

【讨论】:

    猜你喜欢
    • 2012-04-05
    • 1970-01-01
    • 2013-10-24
    • 2010-09-19
    • 1970-01-01
    • 2021-05-27
    • 2012-11-29
    • 2019-04-05
    • 2017-10-28
    相关资源
    最近更新 更多