dans cet extrait:
class ClassWithConstants { private const string ConstantA = "Something"; private const string ConstantB = ConstantA + "Else"; ... }
3 Réponses :
Cette concaténation de la chaîne se produit à la compilation, car il n'y a que des littéraux de chaînes (recherche de Ne vous inquiétez pas pour ça. P>
Il devrait toujours évaluer à "quelque chose" p>
Vous obtiendrez toujours "quelque chose". C'est parce que ConstatB dépend de Constanta.
Vous pouvez même commuter des lignes et vous obtiendrez le même résultat. Le compilateur sait que ConstatB dépend de Constanta et le gérera en conséquence, même si vous l'écrivez dans des classes partielles. P>
Pour être totalement sûr que vous pouvez exécuter une invite de commande vs et appelez il ILDASM. Là, vous pouvez voir le code compilé réel. P>
En outre, si vous essayez de faire ce qui suit, vous obtiendrez une erreur de compilation: p> ajouté: référence spécifique pointée par JON Skeet : P> Ceci est explicitement mentionné à la section 10.4 de la spécification C # 3:
Les constantes sont autorisées à dépendre d'autres constantes dans le même programme que les dépendances ne sont pas de nature circulaire. Le compilateur organise automatiquement pour évaluer les déclarations constantes dans l'ordre approprié. P>
blockQuote> p>
Yup, tu as raison - Doh! :) Essayer de trouver le bit dans la spécification qui garantit ceci ...
Edité ma réponse, donc au moins, cela ne va pas induire les gens en erreur, mais la supprimera si / quand je peux.
C'est sympa. Je suis sûr que les compilateurs de Java ne font pas de telles choses, et il est basé uniquement sur la commande.
@Svish, s'il vous plaît voir le commentaire de Jon Skeet sur sa réponse
@Nathan, merci, n'avait pas remarqué ceci: p