2012-08-23 16 views
7

me di cuenta de que al tratar¿Por qué usar @property en D?

struct PropertyTest 
{ 
    @property int x() { return val; } 
    @property void x(int newVal) { val = newVal; } 

    void test() 
    { 
     int j; 
     j = x; 
     x = 5; 
    } 

private: 
    int val; 
} 

hace exactamente lo mismo cuando salgo de la @property a cabo. Todo compila bien. ¿Cuál es el punto entonces para declarar funciones como @property?

BTW, estoy usando el compilador dmd2.

+1

Por el momento, el compilador es más permisivo de lo que puede ser en el futuro. Marcar getters y setters con @property es una buena forma de probar el futuro. Para ver cómo será el futuro, compilar con -property. –

Respuesta

9

La razón por la que funcionan sin @property es porque se agregó @property después de que permitieran la sintaxis del método de propiedad. Agregar -property a su línea de comandos DMD exige el uso de la anotación @property. No es el predeterminado por razones de compatibilidad con versiones anteriores. Algún día se convertirá en el predeterminado (o eso dicen), por lo que es mejor compilar con -property para asegurarse de que está anotando correctamente.

1

Le permite usar un método sin argumentos sin paréntesis (como leer una variable), y le permite llamar a un método de una sola arg sin paréntesis, la forma en que asigna a una variable.

@property int foo() { ... } 
@property void bar(int x) { ... } 

void main() 
{ 
    bar = foo; 
} 

Debe especificar -property como una opción de línea de comandos para el compilador.