Загальне керівництво для C # - завжди використовувати властивість над загальнодоступним полем. Це має сенс - відкриваючи поле, ви розкриваєте багато деталей щодо реалізації. Маючи властивість, ви інкапсулюєте цю деталь, щоб вона була прихована від споживання коду, а зміни в реалізації відокремлюються від змін інтерфейсу.
Однак мені цікаво, чи є іноді дійсне виключення з цього правила при роботі з readonly
ключовим словом. Застосовуючи це ключове слово у відкритому полі, ви робите додаткову гарантію: незмінність. Це не просто деталізація щодо впровадження, незмінність - це те, що може зацікавити споживача. Використання readonly
поля робить його частиною публічного договору, а те, що не може бути порушене майбутніми змінами чи спадкуванням без необхідності зміни публічного інтерфейсу. Це те, що власність не може запропонувати.
Тож чи гарантування незмінності є законною причиною вибору readonly
поля над властивістю в деяких випадках?
(Для уточнення, я, звичайно, не кажу, що ви завжди повинні робити цей вибір лише тому, що це поле, на даний момент, незмінне, лише тоді, коли це має сенс як частина дизайну класу і його використання передбачає включити незмінність у свій контракт. Мене найбільше цікавлять відповіді, зосереджуючись на тому, чи це може бути виправдано, а не конкретних випадках, коли це не так, як, наприклад, коли потрібно, щоб член був у вас interface
або хотів зробити ледачий навантаження.)