Sobrecarga de procedimiento (Visual Basic)

La sobrecarga de un procedimiento significa definirlo en varias versiones, mediante el mismo nombre, pero listas de parámetros diferentes. El propósito de sobrecargar es definir varias versiones estrechamente relacionadas de un procedimiento sin tener que diferenciarlas por nombre. Para ello, debe variar la lista de parámetros.

Reglas de sobrecarga

Al sobrecargar un procedimiento, se aplican las reglas siguientes:

  • Mismo nombre. Cada versión sobrecargada debe usar el mismo nombre de procedimiento.

  • Firma diferente. Cada versión sobrecargada debe diferir de todas las demás versiones sobrecargadas en al menos uno de los siguientes aspectos:

    • Cantidad 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 (solo para un operador de conversión)

    Junto con el nombre del procedimiento, los elementos anteriores se denominan colectivamente la firma del procedimiento. Al llamar a un procedimiento sobrecargado, el compilador usa la firma para comprobar que la llamada coincide correctamente con la definición.

  • Elementos que no forman parte de la firma. No se puede sobrecargar un procedimiento sin variar la firma. En concreto, no se puede sobrecargar un procedimiento variando solo uno o varios de los siguientes elementos:

    • Palabras clave de modificador del procedimiento, como Public, Shared y Static

    • Nombres de parámetro o parámetro de tipo

    • Restricciones de parámetros de tipo (para un procedimiento genérico)

    • Palabras clave del modificador de 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 se pueden usar para diferenciar entre las versiones sobrecargadas, puede variarlos entre las versiones sobrecargadas que se diferencian correctamente mediante sus firmas.

  • Argumentos enlazados en tiempo de ejecución. Si piensa pasar una variable de objeto enlazada en tiempo de ejecución a una versión sobrecargada, debe declarar el parámetro adecuado como Object.

Varias versiones de un procedimiento

Supongamos que está escribiendo un procedimiento Sub para publicar una transacción en el saldo de un cliente y desea poder hacer referencia al cliente por nombre o por número de cuenta. Para ello, puede definir dos procedimientos Sub diferentes, como en el ejemplo siguiente:

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 es sobrecargar un único nombre de procedimiento. Puede usar la palabra clave Overloads para definir una versión del procedimiento para cada lista de parámetros, 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 desea aceptar un importe de transacción en Decimal o Single, puede sobrecargar post aún más para permitir esta variación. Si ha hecho esto en cada una de las sobrecargas del ejemplo anterior, tendrá cuatro procedimientos Sub, todos con el mismo nombre, pero con cuatro firmas diferentes.

Ventajas de sobrecargar

La ventaja de sobrecargar un procedimiento está en la flexibilidad de la llamada. Para usar el procedimiento post declarado en el ejemplo anterior, el código de llamada puede obtener la identificación del cliente como String o Integer y, a continuación, llamar al mismo procedimiento en cualquiera de los dos casos. Esto se ilustra en el ejemplo siguiente:

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

Consulte también