C# 在C中何时使用get和set属性#

C# 在C中何时使用get和set属性#,c#,C#,什么时候应该在C#中使用get和set属性 如果您决定需要get和set方法,那么它们可能就是您想要的。关于为什么要使用属性以及为什么不想使用属性的详细讨论,请查看Jon Skeet的 使用属性而不是仅仅公开内部类数据的一个很好的原因显然是为了保护这些数据。您可以控制对单个属性的访问,也可以验证正在设置的数据。您还可以实现计算属性来计算值,这对类的用户来说与任何其他属性都没有什么不同。您希望使用属性而不是Get/Set方法的原因有两个(广义而言): 您希望字段简洁,但希望对“外部”授予只读访问权

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

如果您决定需要get和set方法,那么它们可能就是您想要的。关于为什么要使用属性以及为什么不想使用属性的详细讨论,请查看Jon Skeet的

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

您希望使用属性而不是Get/Set方法的原因有两个(广义而言):

  • 您希望字段简洁,但希望对“外部”授予只读访问权限,而对“内部”授予读写访问权限
  • 你想要一个领域的简洁和内涵,同时能够秘密地执行或操纵一些事情,例如:
  • 需要在一定范围内的值(设置期间)
  • 自动清理或夹紧某些值(设置期间)
  • 更新(或延迟更新)其他相关数据(在设置期间)
  • 避免对字段进行必要的完整计算,直到实际使用该字段(在get期间)
  • 如果外部世界仍将其视为一个字段,则您需要将其他任何内容放在适当的方法中,但更愿意这样做
  • 根据MSDN上的说明:

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

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

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

    user544079-我相信您来自Java背景。Cody的回答总结了C#的方法。属性是OP的意思。请注意,您不能生成带有参数的属性,因此在这种情况下,您可能需要Get方法,而不是带有getter的属性。@Robert我现在明白了,增加了第二段来回答这个特定的问题。我理解属性,但不是这个答案……我发现科迪的答案中提到的内容更具可读性。@KMC我同意,斯基特先生是一个比你的平均MSDN页面更好的老师/沟通者。