Visual Basic prend en charge deux méthodes principales pour déclarer des valeurs immuables — Const et ReadOnly. Const est destiné aux constantes de compilation, dont la valeur est connue au moment de la compilation. ReadOnly permet l'initialisation uniquement au moment de la déclaration ou dans le constructeur et maintient l'immuabilité pendant l'exécution.
Historiquement, depuis VB6 et auparavant, une telle sémantique permettait d'éviter les nombres magiques et facilitait la maintenance. Dans VB.NET, les capacités ont été étendues avec l'introduction de ReadOnly pour les champs d'instance et de classe.
Si vous utilisez Const pour des valeurs déterminées à l'exécution ou dépendant de données externes, des erreurs peuvent survenir. Des portées confondues peuvent également provoquer des bugs.
Utilisez Const pour des valeurs immuables simples (nombres, chaînes) connues au moment de la compilation, et ReadOnly pour les cas où la valeur peut être calculée dans le constructeur, mais par la suite — uniquement en lecture.
Exemple de code :
Public Class MathConstants Public Const Pi As Double = 3.1415926535 Public ReadOnly Property UtcCreated As DateTime Public Sub New() UtcCreated = DateTime.UtcNow End Sub End Class
Caractéristiques clés :
Peut-on déclarer Const pour une valeur obtenue à l'exécution (par exemple, à partir d'un fichier)?
Non — Const nécessite une valeur au moment de la compilation. Pour l'initialisation à l'exécution, il convient d'utiliser ReadOnly.
Un champ ReadOnly peut-il être modifié après le constructeur?
Non — la modification n'est possible que lors de l'initialisation (soit lors de la déclaration, soit dans le constructeur), ensuite il est accessible uniquement en lecture.
Faut-il utiliser Const pour les nombres float/double lors de calculs mathématiques?
Oui, si la valeur est connue à l'avance. Mais lors de l'utilisation dans d'autres assemblages, la modification de la valeur de Const nécessitera de recompresser tous les modules dépendants, car le compilateur intègre la valeur directement.
Un développeur a déclaré Const pour le chemin vers un dossier, qui devait ensuite être modifié dans différents environnements (dev/prod). En conséquence, lors du changement de dossier, il fallait reconstruire tous les projets utilisant ce Const.
Avantages :
Inconvénients :
Nous avons implémenté ReadOnly pour les chemins, initialisés dans le constructeur en tenant compte de la configuration de l'environnement. Les valeurs peuvent facilement être modifiées via des paramètres sans reconstruire l'application entière.
Avantages :
Inconvénients :