2012-07-31 18 views
6

Có một sự khác biệt giữa việc sử dụng một thuộc tính chỉ đọc:Read-only vs auto (read-only) sở hữu

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

và sử dụng một tài sản tự động thực hiện:

type T(arg) = 
    member val M = arg 

giả arg đã không có tác dụng phụ? Bất kỳ lý do để thích một trong những khác?

+0

Theo kinh nghiệm của tôi, không có nhiều khác biệt đáng chú ý giữa họ - Cho dù cảm thấy dễ hiểu hơn khi đọc các mã như một toàn thể. – 4444

Trả lời

10

Sự khác biệt cơ bản giữa những thứ đó là member val đại diện cho một biểu thức được tính chỉ một lần trong khi khởi tạo phiên bản. Do đó,

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

Vì vậy, việc xem xét đầu tiên là hiệu suất.

xem xét khác là dựa trên hai hạn chế của tính tự động:

  • bạn chỉ có thể sử dụng chúng trong các loại với ctor tiểu học;
  • họ không thể virtual
+0

Những hạn chế là đáng chú ý. Có lẽ tôi đã không cụm từ nó tốt, nhưng tôi có nghĩa là để giả định 'arg' là một giá trị đơn giản như một chữ. Điều đó, theo như tôi biết, loại bỏ sự khác biệt về chi phí. – Daniel

+3

Tôi thích cú pháp tự động hơn nếu không có tham chiếu 'this'. Nó làm cho nó rõ ràng rằng nó không đột biến đối tượng cũng không phụ thuộc vào các thành viên khác. – Daniel