Hướng dẫn chung cho C # là luôn sử dụng một tài sản trên một lĩnh vực công cộng. Điều này có ý nghĩa - bằng cách phơi bày một trường, bạn đang phơi bày rất nhiều chi tiết triển khai. Với một thuộc tính, bạn gói gọn chi tiết đó để nó ẩn khỏi việc tiêu thụ mã và các thay đổi triển khai được tách rời khỏi các thay đổi giao diện.
Tuy nhiên, tôi tự hỏi liệu đôi khi có một ngoại lệ hợp lệ cho quy tắc này khi xử lý readonly
từ khóa. Bằng cách áp dụng từ khóa này cho một lĩnh vực công cộng, bạn đảm bảo thêm: tính bất biến. Đây không chỉ là một chi tiết triển khai, tính bất biến là điều mà người tiêu dùng có thể quan tâm. Sử dụng một readonly
lĩnh vực làm cho nó trở thành một phần của hợp đồng công cộng, và một cái gì đó không thể bị phá vỡ bởi những thay đổi hoặc kế thừa trong tương lai mà không phải sửa đổi giao diện công cộng. Đó là điều mà một tài sản không thể cung cấp.
Vì vậy, đảm bảo tính bất biến là một lý do chính đáng để chọn một readonly
lĩnh vực trên một tài sản trong một số trường hợp?
(Để làm rõ, tôi chắc chắn không nói rằng bạn nên luôn luôn làm cho sự lựa chọn này chỉ vì lĩnh vực này sẽ xảy ra là bất di bất dịch vào lúc này, chỉ khi nó có ý nghĩa như là một phần của thiết kế của lớp và nó có ý định sử dụng để bao gồm bất biến trong hợp đồng của mình. Tôi chủ yếu quan tâm đến các câu trả lời tập trung vào việc liệu điều này có thể hợp lý, thay vì các trường hợp cụ thể không, chẳng hạn như khi bạn cần thành viên tham gia interface
hoặc muốn lười tải.)