代码之家  ›  专栏  ›  技术社区  ›  uriDium

所有有返回值的方法都应该转换为属性吗?

  •  3
  • uriDium  · 技术社区  · 14 年前

    4 回复  |  直到 14 年前
        1
  •  10
  •   Nathan Ernst    14 年前

    不,我建议你看看 Microsoft's Property Usage Guidlines :

    类库设计者通常必须 一般来说,方法代表动作和 属性表示数据。使用 下面的指南可以帮助您

    • 成员声明,名称是 属性,因为它是逻辑 班级成员。
    • 在以下情况下使用方法:
      • 这个操作很昂贵,你需要和 结果。
      • 明显的副作用。
      • 连续两次调用成员会产生不同的结果。
      • 执行顺序很重要。请注意,类型 以任何顺序检索。
      • 成员返回一个数组。返回数组的属性可以是 很容易引起误解。通常是这样 内部数组,因此用户无法 更改内部状态。这个,耦合的 用户可以轻松地 假设它是一个索引属性, 导致代码效率低下。在 阵列。因此,2n+1份 数组将在 跟随循环。
        2
  •  2
  •   Randolpho    14 年前

    考虑到 迁移到属性,是的。如果它只是返回一个私有成员变量,那么它肯定应该是一个属性。

    从未 必须是属性。有些方法返回 this 允许使用“流畅”的API。这些都不应该是属性。

        3
  •  0
  •   Matti Virkkunen    14 年前

        4
  •  0
  •   Frederik Gheysels    14 年前

    不。

    不能将获取参数的方法转换为属性。

    例如,不应将返回数组的方法转换为属性。这是因为在这种情况下,应该返回数组的副本,以禁止有人在类之外修改数组。 当使用返回数组副本的属性时,程序员更可能编写如下内容:

    foreach( var x in myClass.PropertyThatReturnsArray )
    {
    }
    

    相反,如果您将此作为一种方法编写,则程序员更可能编写以下内容:

    var foo = myClass.GetTheArray();
    
    foreach( var x in foo )
    {
    }
    

    (这是fxcop执行的规则: http://msdn.microsoft.com/en-us/library/0fss9skc(VS.80).aspx ).

    这是一个心理问题