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

Resolución de sobrecargas

Tipos genéricos en Visual Basic

Referencia

Overloads