Langage C# / .NET Core – Mise en garde sur l’utilisation des constantes

Dans la première version d’un logiciel, la classe A contenue dans un projet intitulé Projet1, utilise une la classe B, contenue dans un projet intitulé Projet2 :

La classe B contient une constante déclarée de la manière suivante :

[cc lang= »csharp »]
public const int Cte = 10;
[/cc]

Cette constante est utilisée dans la classe A.

Dans un répertoire, nous déployons les assemblies Projet1.dll et Projet2.dll avec leurs fichiers de configuration. Lors de l’exécution de Projet1.dll, dans l’exécution du code de la classe A, Cte a la valeur 10. Modifions sa valeur en spécifiant 15 :

[cc lang= »csharp »]
public const int Cte = 15;
[/cc]

Etant donné que seule la classe B du Projet2 a été modifiée, nous compilons et déployons uniquement Projet2.dll dans le répertoire. Lors de l’exécution de Projet1.dll, dans l’exécution du code de la classe A, Cte a toujours la valeur 10. Que se passe-t-il ? Etant donné que Cte a été déclaré en tant que constante, sa valeur a été recopiée dans l’assembly Projet1.dll.
La solution ? Pour éviter cette situation, Cte peut être déclarée de la manière suivante :

[cc lang= »csharp »]
public static readonly int Cte = 10;
[/cc]

Cette écriture est iso-fonctionnelle à la déclaration ci-dessus. Elle joue le rôle d’une constante. Ainsi, la valeur de Cte n’est pas recopiée dans l’assembly Projet1.dll. Sa valeur est demandée à chaque fois qu’elle est utilisée. Ainsi, que les assemblys de l’application soient déployés de manière partielle ou totale, la valeur de Cte sera toujours la même et correspondra à la valeur définie dans la classe ClasseB du projet Projet2.dll.

Étiquettes : , ,

About: James RAVAILLE

Travaillant avec la plateforme Microsoft .NET depuis 2002, j'alterne les missions de formation et d'ingénierie avec cette plateforme. J'écris ce blog pour transmettre mes connaissances à tout développeur, qu'il soit débutant ou expérimenté.