2011-03-16 108 views

回答

1

按照Property Usage Guidelines上MSDN:

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

  • 时使用的方法:

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

我了解属性,但没有回答这个问题......我发现在Cody的回答中提到的[Jon Skeet](http://csharpindepth.com/Articles/Chapter8/PropertiesMatter.aspx)更具可读性。 – KMC 2012-03-12 04:00:44

+0

@KMC我同意,Skeet先生是一个比你的平均MSDN页面更好的老师/传播者。 – 2012-03-12 06:13:06

5

Properties可能是你正在寻找的,如果你决定你需要获取和设置方法。对于一个体面的讨论,为什么你会,以及为什么你不想使用属性检查乔恩Skeet的Why Properties Matter

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

+0

+1。精确到点。 – Pradeep 2011-03-16 06:18:19

+1

属性是OP的含义。 – 2011-03-16 06:20:07

+0

请注意,您无法生成接受参数的属性,因此可能需要Get方法而不是带getter属性的情况。 – 2011-03-16 06:21:11

0

有两个独立的(广义上)的原因,你想使用属性,而不是get/set方法:

  1. 你想要一个字段的简洁,但要授予只读访问“外部”,同时读写访问“内部”。
  2. 你想要一个字段的简洁和内涵,而秘密地能够在通风橱下执行或操作的东西,比如:
    1. 需要在一定范围内的值(设定期间)。
    2. 自动清理或调整某些数值(设置期间)。
    3. 更新(或推迟更新)其他依赖数据(设置期间)。
    4. 避免对该字段进行完整计算,直到字段实际使用(在获取期间)。
    5. 还有其他的东西,否则你将需要放在方法内,但如果外部世界仍然把它看作是一个领域的话,会更喜欢。
相关问题