2012-08-23 12 views
7

zorientowali się, próbując żeDlaczego warto korzystać z @property w 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; 
} 

robi dokładnie to samo, kiedy opuszczają @property out. Wszystko kompiluje się dobrze. Po co więc deklarować funkcje jako @property?

BTW, używam kompilatora dmd2.

+1

W tej chwili kompilator jest bardziej permisywny niż może być w przyszłości. Oznaczanie modułów pobierających i ustawiających za pomocą @property jest dobrym sposobem na przyszły dowód. Aby zobaczyć, jaka może być przyszłość, skompiluj z -property. –

Odpowiedz

9

Powodem, dla którego pracują bez numeru @property jest to, że @property został dodany po zezwoleniu na składnię metody właściwości. Dodanie -property do linii poleceń DMD wymusza użycie adnotacji @property. Nie jest to ustawienie domyślne ze względu na kompatybilność wsteczną. Któregoś dnia stanie się domyślnym (lub tak mówią), więc najlepiej jest skompilować z -property, aby upewnić się, że prawidłowo piszesz adnotacje.

1

Pozwala użyć metody nie-Arg bez nawiasów (jak czytanie zmiennej), a to pozwala wywołać metodę single-Arg bez nawiasów, sposób przypisać do zmiennej.

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

void main() 
{ 
    bar = foo; 
} 

Należy określić -property jako opcja wiersza poleceń dla kompilatora.

Powiązane problemy