La définition de la Variable Locale const vs Classe const
Si je suis en utilisant une constante qui est nécessaires que dans une méthode, est-il préférable de déclarer const à l'intérieur de la portée de la méthode, ou dans le domaine de la classe? Est-il de meilleures performances déclarer dans la méthode? Si cela est vrai, je pense que c'est plus la norme pour les définir à portée de classe (en haut du fichier) pour changer la valeur et de recompiler plus facile.
public class Bob
{
private const int SomeConst = 100; //declare it here?
public void MyMethod()
{
const int SomeConst = 100; //or declare it here?
//Do soemthing with SomeConst
}
}
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de gain de performance dans le déplacement de la constante dans la classe. Le CLR est assez intelligent pour reconnaître les constantes une constante, de sorte que la mesure de la performance va les deux sont égaux. Ce qui se passe réellement lorsque vous compilez à IL est que les valeurs des constantes sont codés en dur dans le programme par le compilateur comme des valeurs littérales.
En d'autres termes, une constante n'est pas référencé d'emplacement de mémoire. Ce n'est pas comme une variable, c'est plus comme un littéral. Une constante est un littéral synchronisées sur plusieurs endroits dans votre code. Donc, c'est à vous - même si c'est plus propre programmation pour limiter le champ d'application de la constante de là où elle est pertinente.
Dépend si vous voulez l'utiliser dans votre classe. Le top de la déclaration sera utilisable tout au long de votre classe, alors que l'autre ne sera disponible que dans
MyMethod
. Vous n'aurez pas de gain de performances en faire de toute façon.MyMethod
:o)Voici un petit test que j'ai fait pour évaluer les scénarios;
Le code:
Les résultats de 3 itérations:
Je suppose que l'observation conclut @jnm2 réponse.
Faire exécuter le même code à partir de votre système, et laissez-nous savoir le résultat.
Je le mettrait dans la méthode elle-même. Je ne suis pas un fan de variables que de traîner à la portée quand ils n'ont pas besoin d'être là.
J'essaie seulement de définir des constantes/variables dans la plus étendue minimale que j'en ai besoin. Dans ce cas, si vous êtes en utilisant uniquement dans
MyMethod
, puis de l'y laisser.C'est plus clair à l'époque, où la constante/variable s'applique et aussi vous évite d'avoir à vérifier (même si c'est une compilation de vérifier) si la constante est appelée ailleurs.
Une exception à cette règle pourrait être quelque chose qui est "coûteuse" (le temps) de créer, de calculer, de sorte que je veuille que définie à une instance ou un champ statique, donc je n'ai qu'à calculer qu'une seule fois.
Dépend de l'endroit où vous voulez l'utiliser , si vous allez utiliser dans d'autres méthodes de définir dans la classe , si vous allez l'utiliser que dans une méthode, définir la méthode que vous allez utiliser 🙂