VB.NET prend en charge la surcharge des opérateurs, ce qui permet de définir un comportement personnalisé pour les opérateurs standard (+, -, =, <, >, etc.) lors de l'utilisation de types propres. Cela est réalisé en utilisant le mot-clé Operator et en déclarant une méthode spéciale dans une classe ou une structure.
Exemple (surcharge de l'opérateur "+"):
Public Structure Vector2D Public X As Double Public Y As Double Public Sub New(x As Double, y As Double) Me.X = x Me.Y = y End Sub Public Shared Operator +(a As Vector2D, b As Vector2D) As Vector2D Return New Vector2D(a.X + b.X, a.Y + b.Y) End Operator End Structure
Limitations et règles :
Public Shared (statistiques).= pour l'assignation, seulement pour la comparaison).Erreur — ambiguïté : La surcharge des opérateurs rend le code "magique" : les interlocuteurs pourraient ne pas comprendre pourquoi des objets personnalisés sont additionnés.
Pourquoi est-il impossible de redéfinir l'opérateur d'assignation ":=" ou "=", mais seulement l'opérateur de comparaison "=" en Visual Basic .NET ?
Réponse :
En VB.NET, l'opérateur d'assignation (=) ne peut pas être surchargé, seulement l'opérateur de comparaison. Cela correspond à la sémantique et à l'architecture du langage — on ne peut pas surcharger les règles de fonctionnement de l'opérateur d'assignation de base, car cela violerait la logique fondamentale du langage. En revanche, l'opérateur de comparaison (d'égalité) peut être surchargé pour vos types :
Public Shared Operator =(a As MyClass, b As MyClass) As Boolean Return a.ID = b.ID End Operator
Histoire
Histoire
Histoire
Dans un projet d'algèbre vectorielle, tous les opérateurs possibles ont été surchargés, y compris les comparaisons, sans implémenter également GetHashCode et Equals. Les tables de hachage et SortedList se comportaient de manière incorrecte : les objets n'étaient pas recherchés par clé, ce qui perturbait le fonctionnement des collections.