ProgrammationDéveloppeur VB.NET

Comment déclarer et utiliser correctement des constantes (Const, ReadOnly) en Visual Basic, quelles sont les différences entre elles et quelles pièges faut-il éviter lors de leur utilisation?

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse.

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.

Problème

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.

Solution

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 :

  • Const ne peut être utilisé que pour des valeurs connues au moment de la compilation (y compris des chaînes et des nombres)
  • ReadOnly permet l'initialisation dans le constructeur, assurant l'immuabilité pendant la durée de vie de l'objet
  • Const est toujours statique, ReadOnly peut être différent pour les instances

Questions piégeuses.

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.

Erreurs typiques et anti-patrons

  • Utilisation de Const pour des valeurs qui ne sont en réalité pas constantes
  • Attribution incorrecte de ReadOnly après le constructeur — entraîne des erreurs de compilation
  • Stockage de dérivés de nombres magiques dans le code sans Const/ReadOnly

Exemple de la vie réelle

Cas négatif

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 :

  • Description claire de la variable

Inconvénients :

  • Nécessité de reconstruire tous les modules lors d’un changement
  • Manque de flexibilité

Cas positif

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 :

  • Flexibilité
  • Facilité de maintenance

Inconvénients :

  • Structure de code plus complexe (nécessite des constructeurs)