Préface B>
Pour quelque temps, j'utilise le modificateur réadonnement pour presque tous les champs de classe. Je l'utilise pour la liste des membres la question b> p> Quand utilisez-vous Readonly, ou êtes-vous? P> Est-ce que vous ou votre entreprise avez des pratiques optimales et / ou des normes de codage concernant l'utilisation de la lecture-jour? P> Je suis curieux d'entendre vos pensées sur la classe d'échantillonnage suivante, est le concept général une bonne pratique ou non? p>
6 Réponses :
Comme vous, j'utilise loadonly code> partout je peux. Dans la mesure du possible, j'utilise aussi des collections immuables. P>
Dispose code> est intéressant, car il mute efficacement le type de "utilisable" à "inutilisable" - je serais tenté d'avoir un BOOL code> non réadonn membre à indiquer cela. Encore une fois, je rarement em> me retrouve à utiliser Idisposable code>. Habituellement, lorsque j'utilise des ressources, ce n'est que pour le déroulement d'une seule méthode, donc je rends la ressource locale à cette méthode. P>
Bien que je suis d'accord, je dispose d'une mutation de l'objet, je le vois comme apparentant à l'opérateur de suppression de C ++ ... essentiellement le comportement de l'objet après sa disposition / supprimé est indéfini. Ne seriez-vous pas d'accord?
@Jon, cela signifie-t-il que vous n'utiliseriez jamais ou presque jamais les propriétés automatiques telles que String Public String quelquewiltraadonlyname {Obtenir; ensemble privé; } code>?
@Danm: Je n'utiliserais ce formulaire que si j'étais paresseux, ou si je voulais vraiment pouvoir la transformer en interne.
Le mot clé Lisonly code> est juste un autre outil de votre boîte à outils .NET. Par conséquent, utilisez-le là où il s'applique! En général, vous voulez très bien le moins em> quantité d'accès aux propriétés, p>
La raison en est que vous souhaitez protéger votre code d'être appelé / accessible depuis des endroits où vous n'avez pas l'intention d'être accessible. Donc, revenez à votre question lisonly code>, si vous avez un membre de la classe qui ne doit être modifié que (défini) une fois fort> du constructeur, puis lisonly code> est le moyen de le faire. P>
J'utilise Readonly sur des champs dans n'importe quelle situation où le code sera compilé avec succès. P>
Pourquoi? Simple, si une référence / valeur de champ va soudainement de ne jamais changer pour changer, il peut violer des hypothèses subtiles dans la classe et les consommateurs. En tant que tel, je veux être alerté à ce changement afin d'évaluer les implications de ce nouveau comportement. p>
Je suis d'accord avec votre raisonnement et j'allais généralement quelques étapes plus loin en cherchant à marquer tous les champs de manière libéonnée et à détendre la contrainte après une attention particulière. Peut-être que je le prends trop loin.
@ csharpest.net, c'est presque exactement à quelle distance je le prends. Je suis assez pédant sur cette question et je suis sûr que je vais à la mer de temps en temps. Mais j'ai vu trop de bugs causés à partir de modifications non désirées aux références afin que je préfère la route de Safey.
Cela signifie-t-il que vous ne voulez jamais ou presque jamais utiliser des propriétés automatiques telles que String Public String Un peuwaTraReNyname {Obtenir; ensemble privé; } code>?
Notre société n'a pas de normes de codage officielles sur Quelques-uns d'entre nous utilisent également Resharper, ce qui tend à vous rappeler de l'utiliser un peu. Donc, votre exemple de classe serait quelque chose qui serait considéré comme une "bonne pratique" de notre équipe. P> Readonly Code>, mais il est d'accord universellement sur notre équipe de l'utiliser autant que possible et où il est logique (qui est souvent logique (qui est souvent). Il indique clairement l'intention du programmeur ou de la spécification que cela n'était pas censé être changé une fois qu'il est défini. P>
Pour l'amour du code plus court, je ne le mettez pas, mais seulement strong> si j'ai un outil d'analyse statique qui se protégera contre la mauvaise utilisation. P>
Par exemple, lors de la rédaction de Java, je compte sur la PMD pour vous assurer que je ne me tire pas à pied en ne déclarant pas tous mes paramètres de finale. P>
Vous pouvez, correctement, affirmer que l'utilisation de votre erreur / finale vous informera de votre erreur plus tôt, mais je le fais assez longtemps que mon sens spidey s'éteint pendant l'écriture, et si je manquais de manquer quelque chose de l'analyse statique L'outil me rappelle. P>
Comme plusieurs autres répliques, j'utilise loadonly code> très fréquemment. Heureusement Readonly code>. Il affiche le lecteur du code, que cette valeur est définie une fois que l'instance est créée, qui est un détail précieux imo. p>
Efficace C # 1 a un objet à ce sujet. Je recommande vivement la série C # effective.