Sobrecarga de procedimientos
Actualización: noviembre 2007
Sobrecargar un procedimiento significa definirlo en varias versiones, utilizando el mismo nombre pero distintas listas de parámetros. El propósito de sobrecargar un procedimiento es definir varias versiones de un procedimiento estrechamente relacionadas sin tener que distinguirlas por su nombre. Esto se lleva a cabo modificando la lista de parámetros.
Reglas de sobrecarga
Cuando se sobrecarga un procedimiento, se aplican las siguientes reglas:
Mismo nombre. Todas las versiones sobrecargadas deben tener el mismo nombre de procedimiento.
Diferente firma. Cada versión sobrecargada debe diferir de todas las demás por lo menos en uno de los siguientes aspectos:
Número de parámetros
Orden de los parámetros
Tipos de datos de los parámetros
Número de parámetros de tipo (para un procedimiento genérico)
Tipo de valor devuelto (sólo para un operador de conversión)
Junto con el nombre de procedimiento, los elementos anteriores se denominan de forma colectiva firma del procedimiento. Cuando llama a un procedimiento sobrecargado, el compilador utiliza la firma para comprobar que la llamada coincide exactamente con la definición.
Elementos que no forman parte de la firma. No se puede sobrecargar un procedimiento sin modificar la firma. En concreto, no es posible sobrecargar un procedimiento cambiando únicamente uno o varios de los siguientes elementos:
Palabras clave que modifican a los procedimientos, como Public, Shared y Static
Nombres de parámetros o de parámetros de tipo
Restricciones de parámetros de tipo (para un procedimiento genérico)
Palabras clave que modifican a los parámetros, como ByRef y Optional
Si devuelve un valor
El tipo de datos del valor devuelto (excepto para un operador de conversión)
Los elementos de la lista anterior no forman parte de la firma. Aunque no puede utilizarlos para diferenciar las versiones sobrecargadas, puede modificarlos en las versiones sobrecargadas que ya se diferencian debidamente por sus firmas.
Argumentos enlazados en tiempo de ejecución. Si piensa pasar una variable de objeto de enlace en tiempo de ejecución a un procedimiento sobrecargado, deberá declarar el parámetro correspondiente como Object.
Varias versiones de un procedimiento
Supongamos que está escribiendo un procedimiento Sub para contabilizar una transacción en el saldo de un cliente, y que desea hacer referencia al cliente por su nombre o por su número de cuenta. Para ello, puede definir dos procedimientos Sub diferentes, como se indica en este ejemplo:
Sub postName(ByVal custName As String, ByVal amount As Single)
' Insert code to access customer record by customer name.
End Sub
Sub postAcct(ByVal custAcct As Integer, ByVal amount As Single)
' Insert code to access customer record by account number.
End Sub
Versiones sobrecargadas
Una alternativa podría ser sobrecargar un único nombre de procedimiento. Puede utilizar la palabra clave Overloads para definir una versión del procedimiento para cada lista de parámetros, tal y como se indica a continuación:
Overloads Sub post(ByVal custName As String, ByVal amount As Single)
' Insert code to access customer record by customer name.
End Sub
Overloads Sub post(ByVal custAcct As Integer, ByVal amount As Single)
' Insert code to access customer record by account number.
End Sub
Sobrecargas adicionales
Si también deseara aceptar el importe de una transacción en Decimal o Single, podría sobrecargar de nuevo post para que admitiera esa variación. Si hiciera esto en cada una de las sobrecargas del ejemplo anterior, obtendría cuatro procedimientos Sub, todos ellos con el mismo nombre pero con cuatro firmas diferentes.
Ventajas de la sobrecarga
La ventaja de sobrecargar un procedimiento radica en la flexibilidad de la llamada. Si utilizamos el procedimiento post declarado en el ejemplo anterior, el código de llamada puede obtener la identificación de cliente como String o Integer, y después llamar al mismo procedimiento en los dos casos. Esto se ilustra en el siguiente ejemplo:
Imports MSVB = Microsoft.VisualBasic
Dim customer As String
Dim accountNum As Integer
Dim amount As Single
customer = MSVB.Interaction.InputBox("Enter customer name or number")
amount = MSVB.Interaction.InputBox("Enter transaction amount")
Try
accountNum = CInt(customer)
Call post(accountNum, amount)
Catch
Call post(customer, amount)
End Try
Vea también
Tareas
Cómo: Definir varias versiones de un procedimiento
Cómo: Llamar a un procedimiento sobrecargado
Cómo: Sobrecargar un procedimiento que toma parámetros opcionales
Cómo: Sobrecargar un procedimiento que toma un número indefinido de parámetros
Conceptos
Procedimientos en Visual Basic
Consideraciones sobre la sobrecarga de procedimientos
Tipos genéricos en Visual Basic