2012-08-23 29 views
7

tôi đã tìm ra bằng cách cố gắng màTại sao sử dụng @property trong 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; 
} 

không giống hệt nhau khi tôi rời khỏi @property ra. Mọi thứ biên soạn tốt. Vậy thì, điểm nào để khai báo các hàm là @property?

BTW, tôi đang sử dụng trình biên dịch dmd2.

+1

Hiện tại trình biên dịch dễ chấp nhận hơn so với trong tương lai. Đánh dấu getters và setters với @property là một cách tốt để chứng minh trong tương lai. Để xem tương lai có thể như thế nào, biên dịch với -property. –

Trả lời

9

Lý do chúng hoạt động mà không cần @property là do @property được thêm sau khi chúng cho phép cú pháp phương thức thuộc tính. Thêm -property vào dòng lệnh DMD của bạn thực thi sử dụng @property chú thích. Nó không phải là mặc định cho các lý do tương thích ngược. Một ngày nào đó nó sẽ trở thành mặc định (hoặc vì vậy họ nói) vì vậy tốt nhất để biên dịch với -property để đảm bảo bạn đang chú thích đúng cách.

1

Nó cho phép bạn sử dụng một phương pháp không-arg không có dấu ngoặc (như đọc một biến), và nó cho phép bạn gọi một phương thức đơn arg không có dấu ngoặc, cách bạn gán cho một biến.

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

void main() 
{ 
    bar = foo; 
} 

Bạn nên chỉ định -property làm tùy chọn dòng lệnh cho trình biên dịch.

Các vấn đề liên quan