L'orientation générale pour C # est de toujours utiliser une propriété sur un domaine public. Cela a du sens: en exposant un champ, vous exposez beaucoup de détails d'implémentation. Avec une propriété, vous encapsulez ce détail afin qu'il soit caché de la consommation de code, et les changements d'implémentation sont découplés des changements d'interface.
Cependant, je me demande s'il existe parfois une exception valide à cette règle lors de l'utilisation du readonly
mot clé. En appliquant ce mot-clé à un domaine public, vous faites une garantie supplémentaire: l'immuabilité. Ce n'est pas seulement un détail d'implémentation, l'immuabilité est quelque chose qui pourrait intéresser un consommateur. L'utilisation d'un readonly
champ le fait partie du contrat public, et quelque chose qui ne peut pas être rompu par de futurs changements ou héritages sans avoir à modifier l'interface publique. C'est quelque chose qu'une propriété ne peut pas offrir.
La garantie de l'immuabilité est-elle donc une raison légitime de choisir un readonly
champ plutôt qu'une propriété dans certains cas?
(Pour plus de précision, je ne dis certainement pas que vous devriez toujours faire ce choix juste parce que le champ est immuable en ce moment, uniquement lorsqu'il a du sens dans le cadre de la conception de la classe et que son utilisation prévue inclut l'immuabilité dans son contrat. Je suis surtout intéressé par des réponses se concentrant sur la question de savoir si cela peut être justifié, plutôt que sur des cas spécifiques où ce n'est pas le cas, par exemple lorsque vous avez besoin que le membre soit sur un interface
ou que vous souhaitiez effectuer un chargement paresseux.)