2012-07-31 21 views
6

C'è una differenza tra l'utilizzo di una proprietà di sola lettura:sola lettura vs auto (sola lettura) Proprietà

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

e l'utilizzo di una proprietà implementata automaticamente:

type T(arg) = 
    member val M = arg 

assumendo arg ha senza effetti collaterali? Qualche motivo per preferire uno rispetto all'altro?

+0

Nella mia esperienza, non c'è molta differenza notevole tra di loro - Qualunque sia la sente più comprensibile quando la lettura del codice nel suo complesso. – 4444

risposta

10

La differenza essenziale tra questi è che member val rappresenta un'espressione che è calcolata solo una volta durante l'inizializzazione dell'istanza. Pertanto,

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

Quindi, la prima considerazione è la prestazione.

Un'altra considerazione si basa su due limitazioni di proprietà auto:

  • si possono usare solo in tipi con ctor primaria;
  • non possono essere virtual
+0

Le limitazioni sono notevoli. Forse non l'ho detto bene, ma intendevo assumere che 'arg' è un valore semplice come un letterale. Quello, per quanto ne so, elimina la differenza di costo. – Daniel

+3

Preferisco la sintassi automatica per l'assenza di un riferimento "this". Rende chiaro che non muta l'oggetto né dipende dagli altri membri. – Daniel