2012-04-28 30 views
15

Thực tiễn tốt là sử dụng trường riêng tư hay thuộc tính, khi viết mã trong lớp có chứa chúng?Trong lớp chứa, sử dụng thuộc tính hoặc trường?

Ví dụ: nếu tôi có cặp trường/thuộc tính này, các lớp bên ngoài lớp này phải sử dụng thuộc tính. Điều gì về mã số bên trong lớp học? Nó có nên sử dụng trường tư nhân hay nó cũng đi qua tài sản?

private string _foo; 

protected string Foo 
{ 
    get { return this._foo; } 
} 

private void SomeMethod() 
{ 
    string dummyVariable = "snuh" + this._foo; // So, this... 
    string dummyVariable = "snuh" + this.Foo; // ... or this? 
} 

Một lợi thế của việc sử dụng thuộc tính ở đây, nếu có bất kỳ logic nào trong bộ khởi động, nó vẫn sẽ được thực hiện. Tôi tò mò muốn biết nếu có một chính sách thực hành tốt nhất để làm theo ở đây.

+1

** Ý kiến ​​** của tôi là nó không quan trọng (vì tài sản của bạn không làm gì đặc biệt) miễn là bạn nhất quán, nhưng tôi tò mò những gì người khác nói. – Tung

+0

có thể trùng lặp với [Thực tiễn tốt nhất về sử dụng cục bộ Trường tư nhân x Thuộc tính] (http://stackoverflow.com/questions/833047/best-practice-on-local-use-of-private-field-x-property) – Matt

+0

Lưu ý về danh pháp: Bạn đang sử dụng cụm từ "biến" không chính xác. Trong trường hợp này, bạn có nghĩa là "trường". –

Trả lời

8

Khi sử dụng Auto-Implemented properties, bạn không có lựa chọn - bạn phải sử dụng thuộc tính vì bạn không có quyền truy cập vào trường được tạo.

Nếu tài sản của bạn không đơn giản và thực hiện thêm một số công việc (xác thực, kích hoạt sự kiện, v.v ...), bạn nên gọi thuộc tính để tập trung truy cập và logic.

Nếu bạn có bất kỳ thuộc tính khác (có nghĩa là một tài sản đơn giản không có logic và một lĩnh vực sao lưu) tôi sẽ hỏi tại sao họ không phải là một trong những trên ...

Với ví dụ bạn đã cung cấp cho, nó làm cho sự khác biệt nhỏ - điều quan trọng là phải nhất quán với cách bạn sử dụng chúng và thực sự làm dịu tính thẩm mỹ cá nhân và phong cách mã hóa.

+1

Hai trường hợp sử dụng cho các thuộc tính đơn giản, không tự động xuất hiện trong tâm trí của tôi: các thuộc tính với các giá trị ban đầu không mặc định (C#) hoặc các thuộc tính với một trình thiết lập riêng (VB.NET). – Heinzi

+0

@Heinzi - Đúng, và một phần câu trả lời của tôi về ví dụ này cũng sẽ áp dụng cho những người ... – Oded

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