ProgrammationDéveloppeur VB.NET / Ingénieur logiciel Desktop

Parlez-nous de l'utilisation des propriétés dans Visual Basic, expliquez leur objectif, le fonctionnement des blocs get/set, ainsi que les nuances des propriétés automatiques et les erreurs possibles lors de leur utilisation.

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse

Property dans Visual Basic sert à encapsuler l'accès aux données d'un objet avec la possibilité de vérification, de calculs et de contrôle d'accès. Les propriétés contiennent des blocs Get (pour lire la valeur) et Set (pour définir la valeur).

Fondamentaux de la déclaration et de l'utilisation :

Private _age As Integer Public Property Age() As Integer Get Return _age End Get Set(ByVal value As Integer) If value < 0 Or value > 120 Then Throw New ArgumentException("L'âge doit être compris entre 0 et 120 !") End If _age = value End Set End Property

Avec cette propriété, il est possible de réaliser la validation des valeurs, le caching, le calcul à la volée, etc., et pour l'utilisateur, l'objet semble être un simple champ.

Propriétés automatiques (VB.NET) :

Public Property ItemId As Integer ' crée automatiquement un champ caché, pas d'accès à la logique

Nuance : les propriétés automatiques ne peuvent pas être étendues avec une logique interne sans déclaration explicite des get/set.

Question piège

Question : Est-il possible de réaliser une propriété en Visual Basic avec uniquement un set public et un get privé ? Comment définir correctement différents niveaux d'accès pour get et set ?

Réponse : Oui, à partir de VB.NET, on peut spécifier différents niveaux d'accès pour get et set :

Public Property Salary As Decimal Private Get Return _salary End Get Set(ByVal value As Decimal) _salary = value End Set End Property

Dans cet exemple, seule la classe peut obtenir la valeur de Salary, les objets externes ne peuvent que la définir.

Exemples d'erreurs réelles dues à l'ignorance des subtilités du sujet


Histoire

Un développeur a utilisé des propriétés automatiques pour tous les champs de l'objet métier. Plus tard, la validation des saisies de valeurs négatives est devenue nécessaire, mais le changement de la propriété automatique en explicite nécessitait des modifications manuelles d'une grande partie du code, ce qui a conduit à des erreurs et à des efforts supplémentaires.


Histoire

Dans le processus de migration de VB6 vers VB.NET, certaines propriétés ont été réalisées comme des champs avec des modificateurs d'accès publics : cela a ouvert un accès non autorisé complet aux données internes de la classe, ce qui a conduit à des modifications indésirables de l'état par des objets externes.


Histoire

Dans un objet complexe, la propriété contenait dans le bloc get des calculs supplémentaires, y compris le traitement de fichiers. Lors de fréquentes demandes de la propriété, la performance de l'application chutait brusquement ; il est apparu qu'il valait mieux utiliser un champ privé avec mise en cache du résultat, plutôt que de calculer la valeur à la volée à chaque get.