C# 6.0 ajoute des propriétés automatiques en lecture seule
public object MyProperty { get; }
Ainsi, lorsque vous n'avez pas besoin de prendre en charge les anciens compilateurs, vous pouvez disposer d'une propriété véritablement en lecture seule avec un code tout aussi concis que celui d'un champ en lecture seule.
Versioning :
Je pense que cela ne fait pas une grande différence si vous n'êtes intéressé que par la compatibilité des sources.
L'utilisation d'une propriété est préférable pour la compatibilité binaire, car vous pouvez la remplacer par une propriété dotée d'un setter sans casser le code compilé en fonction de votre bibliothèque.
Convention :
Vous suivez la convention. Dans des cas comme celui-ci, où les différences entre les deux possibilités sont relativement mineures, il est préférable de suivre la convention. Un cas où cela peut se retourner contre vous est le code basé sur la réflexion. Il peut n'accepter que des propriétés et non des champs, par exemple un éditeur/visualisateur de propriétés.
Sérialisation
Le passage d'un champ à une propriété brisera probablement de nombreux sérialiseurs. Et AFAIK XmlSerializer
ne sérialise que les propriétés publiques et non les champs publics.
Utilisation d'une propriété automatique
Une autre variante courante est l'utilisation d'une propriété automatique (autoproperty) avec une propriété privée (private setter). Bien qu'il s'agisse d'une propriété courte, elle n'impose pas la lecture seule. Je préfère donc les autres variantes.
Le champ en lecture seule est auto-documenté
Le champ présente toutefois un avantage :
Il suffit d'un coup d'œil à l'interface publique pour comprendre qu'elle est en fait immuable (à l'exception de la réflexion). Alors que dans le cas d'une propriété, vous pouvez seulement voir que usted ne peut pas la modifier, il faut donc se référer à la documentation ou à l'implémentation.
Mais pour être honnête, j'utilise assez souvent la première dans le code de l'application car je suis paresseux. Dans les bibliothèques, je suis généralement plus minutieux et je suis la convention.