VB.NET soporta la sobrecarga de operadores, lo que permite definir el comportamiento personalizado para los operadores estándar (+, -, =, <, >, etc.) al trabajar con tipos propios. Esto se logra mediante la palabra clave Operator y la declaración de un método especial en una clase o estructura.
Ejemplo (sobrecarga del operador "+"):
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
Restricciones y reglas:
Public Shared (estáticos).= para asignación, solo para comparación).Error - ambigüedad: la sobrecarga de operadores hace que el código sea "mágico": los entrevistadores pueden no adivinar por qué se suman objetos personalizados.
¿Por qué no se puede redefinir el operador de asignación ":=" o "=", y solo el operador de comparación "=" en Visual Basic .NET?
Respuesta:
En VB.NET, el operador de asignación (=) no puede ser sobrecargado, solo el operador de comparación. Esto corresponde a la semántica y arquitectura del lenguaje: no se puede sobrecargar las reglas de funcionamiento del operador de asignación base, ya que eso violaría la lógica fundamental del lenguaje. Por otro lado, el operador de comparación (igualdad) sí se puede sobrecargar para sus propios tipos:
Public Shared Operator =(a As MyClass, b As MyClass) As Boolean Return a.ID = b.ID End Operator
Historia
Historia
Historia
En un proyecto de álgebra vectorial, se sobrecargaron todos los posibles operadores, incluyendo comparaciones, sin implementar también GetHashCode y Equals. Las tablas hash y SortedList comenzaron a comportarse incorrectamente: los objetos no se buscaban por claves, alterando el funcionamiento de las colecciones.