En Visual Basic, la sobrecarga de métodos (overloading) permite crear varios métodos con el mismo nombre, pero con diferentes parámetros (tipos, cantidad, orden). Para la sobrecarga se utiliza la palabra clave Overloads antes de la declaración del método. Esto ayuda a hacer la interfaz de la clase más flexible y conveniente, permitiendo utilizar el mismo método con diferentes conjuntos de parámetros. La anulación (overriding), en cambio, está relacionada con la herencia y permite cambiar la implementación de un método de la clase base en una clase derivada; para esto se utilizan las palabras clave Overrides (en la clase derivada) y Overridable (en la clase base).
Ejemplo de sobrecarga de métodos:
Class MathUtil ' Sobrecarga para la suma de dos enteros Public Overloads Function Add(a As Integer, b As Integer) As Integer Return a + b End Function ' Sobrecarga para la suma de tres enteros Public Overloads Function Add(a As Integer, b As Integer, c As Integer) As Integer Return a + b + c End Function ' Sobrecarga para la suma de dos números de punto flotante Public Overloads Function Add(a As Double, b As Double) As Double Return a + b End Function End Class
Pregunta: "¿Se pueden sobrecargar procedimientos y funciones por el nombre del tipo de retorno? ¿Por qué?"
Respuesta: No, en Visual Basic la sobrecarga de métodos solo se permite por conjuntos de parámetros (tipo, cantidad, orden). La sobrecarga por el tipo de valor de retorno no es posible: si las firmas de los métodos solo difieren en el tipo de resultado, se producirá un error de compilación.
Ejemplo:
' ¡Esto provocará un error de compilación! Overloads Function Foo(x As Integer) As Integer End Function Overloads Function Foo(x As Integer) As String End Function
Historia
En un proyecto de banca en línea, un desarrollador implementó métodos de validación de usuarios a través de sobrecarga, pero eligió diferenciarse solo por el tipo de valor de retorno (por ejemplo, uno retornaba Boolean, el otro String para el mensaje de error). Esto llevó a ambigüedades en la llamada al método, imposibilidad de compilación, y el equipo tuvo que corregir urgentemente la interfaz, lo que retrasó el lanzamiento.
Historia
En un sistema corporativo para el inventario de almacenes, intentaron hacer un método sobrecargado AddItem, diferenciándolos por el tipo de resultado (por ejemplo, uno - resultado de adición, el otro - ID de la entrada añadida). Después de la integración con una API externa, las pruebas dejaron de compilar, ya que el lenguaje no soporta tal sobrecarga, y se tuvo que reconsiderar completamente la arquitectura de interacción.
Historia
En un viejo proyecto de procesamiento de datos científicos, intentaron sobrecargar una función por el tipo de retorno (uno Double, el otro Decimal). Las instancias de llamada resultaron indistinguibles para el compilador, lo que llevó a errores de ejecución inesperados y a un trabajo doble para corregir la interfaz de la biblioteca.