Khi chúng ta nên sử dụng hàm tạo trên thuộc tính hoặc ngược lại trong khi gán giá trị.Constructor hoặc thuộc tính: cái nào là lựa chọn tốt hơn trong khi gán giá trị
Trả lời
Nhà xây dựng là một loại hợp đồng rất thuận tiện và mạnh mẽ - một cách để yêu cầu người tiêu dùng cung cấp thông tin nhất định trước khi họ thậm chí có thể sử dụng đối tượng của bạn. Vì vậy, để biết thông tin cần thiết cho cá thể hoạt động đúng, hãy sử dụng tham số hàm tạo. Đây là khái niệm cơ bản về tiêm phụ thuộc - bất cứ điều gì bạn phụ thuộc vào để thực hiện công việc của bạn, phải được tiêm (cung cấp) cho bạn trước khi bạn bắt đầu.
Thuộc tính có thể là một vấn đề thú vị. Nói chung, kinh nghiệm đã dạy tôi rằng bất cứ nơi nào có thể, các thuộc tính phải là chỉ đọc và các đối tượng thường phải là không thay đổi bên ngoài càng tốt. Thêm một bộ công khai vào một thuộc tính là một hệ số phức tạp cho lớp của bạn. Tất nhiên, luôn có các loại đối tượng - thực thể là một ví dụ hay - nơi những người định cư có ý nghĩa. Nhưng đối với hầu hết các đối tượng, mô hình "write-to through constructor"/"read-from through properties" cho nhà nước đã làm giảm đáng kể sự phức tạp và nguy cơ lỗi trong các ứng dụng mà tôi đã chịu trách nhiệm.
cảm ơn sự giúp đỡ – user498432
Bạn sử dụng hàm tạo khi bạn cần các giá trị ban đầu tùy ý sane và thuộc tính khi bạn muốn các giá trị có thể thay đổi sau này.
Tôi luôn luôn thích Properties, là tốt – user498432
Nếu đối tượng của bạn không cần giá trị ban đầu tùy ý, đó là để nói rằng nó có giá trị sane trong phương pháp xây dựng chính nó, chắc chắn. –
Sử dụng hàm tạo nếu các giá trị tham số thực sự được yêu cầu để đối tượng của bạn được xây dựng (không có đối tượng không thể bắt đầu hiển thị). Sử dụng các thuộc tính cho các tham số có giá trị mặc định có thể chấp nhận được, vì vậy, không được gán chúng cho tất cả. Bạn có thể cung cấp thêm một số hàm tạo sẽ gán một số thuộc tính làm viết tắt, lịch sự cho người dùng của bạn.
Có một vài trường hợp có thể thay đổi các thuộc tính có thể thích hợp hơn:
Đối với 'tinh khiết' đối tượng dữ liệu có thể thay đổi mà chỉ đơn thuần là thiết lập các thuộc tính có thể không có tác dụng phụ. Ví dụ, bạn có thể có một đối tượng đại diện cho một số thực thể trong cơ sở dữ liệu, nhưng việc sửa đổi các thuộc tính của nó sẽ không có hiệu lực cho đến khi bạn thực hiện một thao tác Commit một cách rõ ràng. Đối tượng là một gói chứa dữ liệu, nhưng không có gì phản ứng trực tiếp với các thay đổi trong dữ liệu.
Nếu bạn có một số lượng lớn trạng thái có thể định cấu hình sẽ ảnh hưởng đến một số thao tác và nhiều thuộc tính có thể định cấu hình có giá trị mặc định có ý nghĩa. Nếu đây là các thuộc tính của lớp thực hiện thao tác, thì điển hình là có một số khái niệm 'đóng băng' trạng thái sao cho các thuộc tính có thể thay đổi được ném ngoại lệ trong khi hoạt động đang chạy.
Nếu bạn đang phát triển một lớp học sẽ được tiêu thụ bởi một nhà thiết kế trực quan hoặc hệ thống khác dựa trên Phản ánh trên các thuộc tính. Ví dụ, hệ thống ràng buộc dữ liệu trong WPF sử dụng rộng rãi các thuộc tính có thể thay đổi được như một cách để giao tiếp các tương tác UI. Với một thiết kế phù hợp để quản lý các đột biến này, bạn có thể tạo ra một số giao diện rất mạnh mẽ và đáp ứng.
- 1. Lựa chọn thuộc tính giá trị với html Agility Pack
- 2. Có cách nào tốt hơn (hiệu suất) tính toán giá trị hơn cái này không?
- 3. Android: ViewFlipper hoặc ViewPager - Lựa chọn nào tốt hơn?
- 4. sử dụng giá trị của enum trong g: chọn khi enum là thuộc tính của đối tượng lựa chọn
- 5. Lựa chọn thuộc tính Weka
- 6. Sử dụng Moq để gán giá trị thuộc tính khi phương thức được gọi là
- 7. Cái nào tốt hơn, #fff hoặC#FFF?
- 8. Thêm giá trị mới cho một lựa chọn thuộc tính trong Magento
- 9. Apache2: mod_wsgi hoặc mod_python, cái nào tốt hơn?
- 10. Trong C++, tốt hơn là giới hạn giá trị sử dụng std :: min hoặc một nhánh?
- 11. Lựa chọn nào tốt nhất để lập chỉ mục giá trị Boolean trong lucene?
- 12. Cái nào tốt hơn?
- 13. Thay vì Kích hoạt hoặc Cột được Tính? cái nào tốt hơn?
- 14. Tôi có thể chọn nhiều hơn một giá trị cho một thuộc tính trong XAML không?
- 15. Whats thiết kế/thực hành tốt hơn: Thuộc tính dễ vỡ hoặc thuộc tính 1 giá trị và 1 bool "có" thuộc tính?
- 16. Tạo DynamicMethod để gán giá trị cho một thuộc tính?
- 17. Nhận giá trị thuộc tính như mảng từ lựa chọn các yếu tố sử dụng jQuery
- 18. jquery 'thuộc tính chứa' chọn với một giá trị động
- 19. TR1 từ Boost hoặc VC10 - Cái nào tốt hơn?
- 20. Cú pháp gán nhiều giá trị enum cho một thuộc tính trong F # là gì?
- 21. Nhiều lựa chọn giá trị sửa mẫu lựa chọn
- 22. Cái gì tốt hơn, ConfigObj hoặc ConfigParser?
- 23. xml, html hoặc xhtml trong <xsl:output>: Lựa chọn nào tốt hơn?
- 24. int Nullable trong Thuộc tính Constructor hoặc tài sản
- 25. SIMD có đáng giá không? Có lựa chọn nào tốt hơn không?
- 26. Cách gắn đầu vào biểu mẫu giá trị chọn để gán thuộc tính trong bộ điều khiển
- 27. Lựa chọn trường mô hình Django - sẽ không phải là một quyết định tốt hơn?
- 28. Kiểm tra xem bất kỳ thuộc tính nào đã được gán giá trị
- 29. Không thể nhận giá trị của thuộc tính ____: đối tượng là null hoặc không xác định
- 30. jQuery: Chọn tất cả các yếu tố trong đó thuộc tính là lớn hơn một giá trị
http://stackoverflow.com/questions/863045/what-is-the-preferred-way-of-constructing-objects-in-c-constructor-parameters-o – jcolebrand
Tôi đoán bạn có nghĩa là gán * ban đầu * giá trị ... –
@drachenstern - cảm ơn cho liên kết – user498432