Quels sont les avantages d’avoir une variable membre déclarée comme lecture seule ? Il protège seulement contre une personne changeant au cours du cycle de vie de la classe ou y a-t-il n’importe quel compilateur des améliorations de vitesse en raison de ce mot-clé
Réponses
Trop de publicités?Je ne crois pas qu'il existe des gains de performance de l'aide d'un champ en lecture seule. C'est tout simplement une vérification pour s'assurer qu'une fois que l'objet est entièrement construit, que le champ ne peut pas être pointé vers une nouvelle valeur.
Cependant "readonly" est très différent des autres types de lecture seule sémantique parce qu'il est appliqué au moment de l'exécution par le CLR. Le mot clé readonly compile vers le bas .initonly qui est vérifiable par le CLR.
L'avantage réel de ce mot clé est de générer des données immuables structures. Immuable structures de données, par définition, ne peut pas être changé une fois construits. De ce fait, il est très facile de raisonner sur le comportement d'une structure à l'exécution. Par exemple, il n'existe aucun risque de passage d'un immuable d'une structure à l'autre aléatoire portion de code. Ils ne peuvent pas changé, si vous pouvez programmer de manière fiable à l'encontre de cette structure.
Ici, c'est un bon point d'entrée sur l'un des avantages de l'immuabilité: Filetage
L' readonly
mot-clé est utilisé pour déclarer une variable membre d'une constante, mais permet à la valeur calculée au moment de l'exécution. Ceci diffère d'une constante déclarée avec l' const
modificateur, qui doit avoir la valeur est définie au moment de la compilation. À l'aide de readonly
vous pouvez définir la valeur du champ dans la déclaration, ou dans le constructeur de l'objet que le champ est un membre de.
Aussi l'utiliser si vous ne voulez pas avoir à recompiler externe Dll qui font référence à la constante (car il est remplacé au moment de la compilation).
Il n'y a pas apparent des avantages de performance à l'aide d' readonly
, au moins aucun que j'ai jamais vu mentionné nulle part. C'est juste pour faire exactement comme vous le suggérez, pour empêcher la modification une fois qu'il a été initialisé.
Il est donc avantageux, car il vous permet d'écrire plus robuste, plus lisible le code. Le réel avantage de ce genre de choses viennent quand vous travaillez dans une équipe ou pour l'entretien. Déclarer que quelque chose comme readonly
s'apparente à l'élaboration du contrat pour que l'utilisation de la variable dans le code. Il pense que l'ajout de la documentation, de la même manière que les autres mots-clés comme internal
ou private
,, vous dites "cette variable ne doit pas être modifié après l'initialisation", et de plus vous êtes à l'application .
Donc, si vous créez une classe et de la marque de certains des membres les variables readonly
par la conception, alors vous empêcher de vous-même ou un autre membre de l'équipe de faire une erreur, plus tard, lorsqu'ils sont d'une expansion ou la modification de votre classe. À mon avis, c'est un avantage de la valeur (à la petite dépense supplémentaire de complexité du langage comme doofledorfer mentionne dans les commentaires).
Pour le dire en termes très concrets :
Si vous utilisez un const dans dll A et dll B fait référence que const, la valeur de cette volonté const être compilé dans une dll B. Si vous redéployez dll A avec une nouvelle valeur pour que const, dll B utilise toujours la valeur d’origine.
Si vous utilisez un readonly dans dll A et dll B référence que readonly, que readonly sera toujours être consulté lors de l’exécution. Cela signifie que si vous redéployez dll A avec une nouvelle valeur pour que readonly, dll B utilise cette nouvelle valeur.