2012-07-31 14 views
6

¿Hay alguna diferencia entre usar una de sólo lectura propiedad:de sólo lectura vs auto propiedad (de sólo lectura)

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

y el uso de una propiedad implementado de forma automática:

type T(arg) = 
    member val M = arg 

asumiendo arg ha ¿sin efectos secundarios? ¿Alguna razón para preferir uno sobre el otro?

+0

En mi experiencia, no hay mucha diferencia notable entre ellos - Cualquiera que sea más comprensible siente al leer el código en su conjunto. – 4444

Respuesta

10

La diferencia esencial entre ellos es que member val representa una expresión que se calcula sólo una vez durante inicialización de instancia. Por lo tanto,

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

Por lo tanto, la primera consideración es el rendimiento.

Otra consideración se basa en dos limitaciones de las propiedades de auto:

  • sólo se puede utilizar en tipos con Héctor primaria;
  • que no pueden ser virtual
+0

Las limitaciones son notables. Quizás no lo expresé bien, pero pretendía suponer que 'arg' es un valor simple, como un literal. Eso, hasta donde sé, elimina la diferencia de costos. – Daniel

+3

Prefiero la sintaxis automática para la ausencia de una referencia 'this'. Deja en claro que ni muta el objeto ni depende de otros miembros. – Daniel

Cuestiones relacionadas