Compartir a través de


Sobrecarga de procedimiento (Visual Basic)

Sobrecargar un procedimiento significa definirlo en varias versiones, usando el mismo nombre pero listas de parámetros diferentes. El propósito de la sobrecarga es definir varias versiones de un procedimiento que están estrechamente relacionadas, sin tener que diferenciarlas por su nombre. Para ello, puede 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 retorno (solo para un operador de conversión)

    Junto con el nombre del procedimiento, los elementos anteriores se denominan colectivamente la firma del procedimiento. Cuando se llama 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 modificadores de procedimiento, como Public, Sharedy Static

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

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

    • Palabras clave del modificador de parámetros, como ByRef y Optional

    • Si devuelve un valor

    • 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 Sub procedimiento para publicar una transacción con el saldo de un cliente y desea poder hacer referencia al cliente por nombre o por número de cuenta. Para dar cabida a esto, puede definir dos procedimientos diferentes Sub , 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 consiste en 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 quería aceptar una cantidad de transacción en Decimal o Single, podría sobrecargar post aún más para permitir esta variación. Si lo hizo en cada una de las sobrecargas del ejemplo anterior, tendría cuatro Sub procedimientos, 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