只读与自动(只读)属性

时间:2012-07-31 19:50:16

标签: f# f#-3.0

使用只读属性之间是否存在差异:

type T(arg) =
  member x.M = arg

并使用自动实现的属性:

type T(arg) =
  member val M = arg

假设arg没有副作用?有理由偏爱一个吗?

1 个答案:

答案 0 :(得分:10)

这些之间的本质区别是member val表示在实例初始化期间仅计算一次的表达式。因此,

type Person(fname, lname) =
  member val Name = fname + lname // would be calculated once

因此,首先要考虑的是性能。

另一个考虑因素是基于自动属性的两个限制:

  • 您只能在具有primary ctor的类型中使用它们;
  • 他们不能virtual