2012-07-31 147 views
6

是否有使用只讀屬性之間的差異:只讀VS自動(只讀)屬性

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

,並使用自動實現的屬性:

type T(arg) = 
    member val M = arg 

假設arg已無副作用?有什麼理由比其他人更喜歡?

+0

根據我的經驗,沒有他們之間沒有太大差別noticable - 讀代碼作爲一個整體,當自己覺得更容易理解。 – 4444 2012-07-31 20:44:01

回答

10

這兩者之間的本質區別是member val表示在實例初始化期間僅計算一次的表達式。因此,

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

所以,首先考慮的是性能。

另一個考慮是基於對汽車性能的兩個限制:

  • 你只能在類型與主構造函數中使用它們;
  • 他們不能virtual
+0

這些限制值得注意。也許我沒有說得好,但我的意思是假定'arg'是一個簡單的值,比如文字。據我所知,這消除了成本差異。 – Daniel 2012-07-31 21:00:59

+3

我更喜歡自動語法,因爲缺少'this'引用。它清楚地表明它既不改變對象也不依賴於其他成員。 – Daniel 2012-07-31 21:06:11