8
votes

Réflexions sur l'utilisation de l'utilisation de tous les membres de la classe d'une classe?

Préface

Pour quelque temps, j'utilise le modificateur réadonnement pour presque tous les champs de classe. Je l'utilise pour la liste des membres membres, des membres iodisposibles, des véhiculest, des chaînes, etc. Tout sauf les types de valeur que j'ai l'intention de changer. J'ai tendance à le faire même lorsque je voudrais normalement nul un membre à disposer (). IMHO Les avantages de ne pas avoir besoin de si les déclarations de l'IF pour tester les conditions nulles ou disposées considérablement l'emportent considérablement le «potentiel» pour des problèmes dans des objets qui «pouvaient» être disposés plusieurs fois.

la question

Quand utilisez-vous Readonly, ou êtes-vous?

Est-ce que vous ou votre entreprise avez des pratiques optimales et / ou des normes de codage concernant l'utilisation de la lecture-jour?

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? xxx


1 commentaires

Efficace C # 1 a un objet à ce sujet. Je recommande vivement la série C # effective.


6 Réponses :


5
votes

Comme vous, j'utilise loadonly partout je peux. Dans la mesure du possible, j'utilise aussi des collections immuables.

Dispose est intéressant, car il mute efficacement le type de "utilisable" à "inutilisable" - je serais tenté d'avoir un BOOL non réadonn membre à indiquer cela. Encore une fois, je rarement me retrouve à utiliser Idisposable . 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.


3 commentaires

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é; } ?


@Danm: Je n'utiliserais ce formulaire que si j'étais paresseux, ou si je voulais vraiment pouvoir la transformer en interne.



3
votes

Le mot clé Lisonly 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 quantité d'accès aux propriétés,

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 , si vous avez un membre de la classe qui ne doit être modifié que (défini) une fois du constructeur, puis lisonly est le moyen de le faire.


0 commentaires

10
votes

J'utilise Readonly sur des champs dans n'importe quelle situation où le code sera compilé avec succès.

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.


3 commentaires

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é; } ?



0
votes

Notre société n'a pas de normes de codage officielles sur Readonly , 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.

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.


0 commentaires

0
votes

Pour l'amour du code plus court, je ne le mettez pas, mais seulement si j'ai un outil d'analyse statique qui se protégera contre la mauvaise utilisation.

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.

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.


0 commentaires

0
votes

Comme plusieurs autres répliques, j'utilise loadonly très fréquemment. Heureusement RESHARPER est très intéressant de repérer lorsque les membres peuvent être fabriqués Readonly . 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.


0 commentaires