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

时间:2011-03-16 06:14:15

标签: c#

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

3 个答案:

答案 0 :(得分:6)

如果你决定需要获取和设置方法,

Properties可能就是你正在寻找的东西。关于为什么你会这么做以及为什么你不想使用房产进行讨论,请查看Jon Skeet的Why Properties Matter

使用属性而不仅仅是暴露内部类数据的一个很好的理由显然是为了保护这些数据。您可以控制各个属性的访问权限以及验证正在设置的数据。您还可以实现计算出的属性来计算值,这与您班级用户的任何其他属性没有区别。

答案 1 :(得分:1)

根据MSDN上的Property Usage Guidelines

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

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

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

答案 2 :(得分:0)

为什么要使用属性而不是Get / Set方法有两个独立的(广义上说)原因:

  1. 你想要一个字段的简洁,但希望授予对“outside”的只读访问权限,同时对“inside”进行readwrite-access。
  2. 你想要一个领域的简洁和内涵,同时秘密地能够强制或操纵引擎盖下的东西,例如:
    1. 要求某个范围内的值(在设定期间)。
    2. 自动清理或夹紧某些值(在设定期间)。
    3. 更新(或推迟更新)其他相关数据(在设置期间)。
    4. 避免对该字段所需的完整计算,直到实际使用该字段(在获取期间)。
    5. 除此之外你还需要放置任何其他方法,但如果外界仍将其视为一个领域,则更愿意。