2012-08-23 8 views
7

dachte ich, dassWarum @property in D verwenden?

durch Ausprobieren
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; 
} 

tut genau das gleiche, wenn ich die @property auslassen. Alles ist in Ordnung. Worauf kommt es dann an, Funktionen als zu deklarieren?

BTW, ich benutze den dmd2-Compiler.

+1

Momentan ist der Compiler permissiver als in Zukunft. Das Markieren von Gettern und Settors mit @property ist ein guter Weg zur Zukunftssicherheit. Um zu sehen, wie die Zukunft aussehen könnte, kompilieren Sie mit -property. –

Antwort

9

Der Grund, warum sie ohne arbeiten ist, weil hinzugefügt wurde, nachdem sie die Syntax der Eigenschaft Methode erlaubt. Durch Hinzufügen von -property zu Ihrer DMD-Befehlszeile wird die Verwendung der -Annotation erzwungen. Aus Gründen der Abwärtskompatibilität ist dies nicht der Standard. Eines Tages wird es der Standard (oder so sagen sie), so ist es am besten, mit -property zu kompilieren, um sicherzustellen, dass Sie richtig kommentieren.

1

Sie können eine no-arg-Methode ohne Klammern verwenden (wie das Lesen einer Variablen) und eine einzelne arg-Methode ohne Klammern aufrufen, wie Sie sie einer Variablen zuweisen.

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

void main() 
{ 
    bar = foo; 
} 

Sie -property als Befehlszeilenoption für den Compiler angeben sollte.

Verwandte Themen