Propiedades y métodos sobrecargados

Actualización: noviembre 2007

La sobrecarga consiste en crear más de un procedimiento, constructor de instancia o propiedad en una clase con el mismo nombre y distintos tipos de argumento.

Uso de la sobrecarga

La sobrecarga es especialmente útil cuando un modelo de objeto exige el uso de nombres idénticos para procedimientos que operan en diferentes tipos de datos. Por ejemplo, una clase que puede mostrar diferentes tipos de datos podría tener procedimientos Display como los siguientes:

Overloads Sub Display(ByVal theChar As Char)
    ' Add code that displays Char data.
End Sub
Overloads Sub Display(ByVal theInteger As Integer)
    ' Add code that displays Integer data.
End Sub
Overloads Sub Display(ByVal theDouble As Double)
    ' Add code that displays Double data.
End Sub

Sin sobrecarga, sería necesario crear distintos nombres para cada procedimiento, aunque realicen el mismo cometido, como se muestra a continuación:

Sub DisplayChar(ByVal theChar As Char)
    ' Add code that displays Char data.
End Sub
Sub DisplayInt(ByVal theInteger As Integer)
    ' Add code that displays Integer data.
End Sub
Sub DisplayDouble(ByVal theDouble As Double)
    ' Add code that displays Double data.
End Sub

La sobrecarga facilita el uso de propiedades o métodos, puesto que ofrece una selección de tipos de datos que se pueden utilizar. Por ejemplo, se pude llamar al método sobrecargado Display descrito anteriormente con cualquiera de las siguientes líneas de código:

' Call Display with a literal of type Char.
Display("9"c)
' Call Display with a literal of type Integer.
Display(9)
' Call Display with a literal of type Double.
Display(9.9R)

En tiempo de ejecución, Visual Basic llama al procedimiento correcto basándose en los tipos de datos de los parámetros que se han especificado.

Nota:

La sobrecarga, el reemplazo y el sombreado son conceptos similares que pueden confundirse fácilmente. Para obtener más información, consulte Introducción a los objetos en Visual Basic.

Reglas de sobrecarga

Es posible crear un miembro sobrecargado para una clase agregando dos o más propiedades o métodos con el mismo nombre. A excepción de los miembros derivados sobrecargados, cada miembro sobrecargado debe tener distintas listas de parámetros, y los elementos que a continuación se enumeran, no se pueden utilizar como características diferenciadoras al sobrecargar una propiedad o un procedimiento:

  • Modificadores, como por ejemplo ByVal o ByRef, que se aplican a un miembro o parámetros de un miembro.

  • Nombres de parámetros

  • Tipos de valores devueltos de procedimientos

La palabra clave Overloads es opcional en la sobrecarga, aunque si algún miembro sobrecargado la utiliza, todos los demás miembros sobrecargados con el mismo nombre deben especificarla también.

Las clases derivadas pueden sobrecargar miembros heredados con miembros que tengan idénticos parámetros y tipos de parámetros, un proceso denominado sombrear por nombre y firma. Si se utiliza la palabra clave Overloads al sombrear por nombre y firma, se utilizará la implementación de la clase derivada del miembro en vez de la implementación de la clase base y todas las demás sobrecargas de dicho miembro estarán disponibles para las instancias de la clase derivada.

Si se omite la palabra clave Overloads al sobrecargar un miembro heredado con un miembro que tiene parámetros y tipos de parámetros idénticos, la sobrecarga se denomina sombrear por nombre. El proceso sombrear por nombre reemplaza a la implementación heredada de un miembro y hace que todas las demás sobrecargas no estén disponibles para las instancias de la clase derivada y sus descendientes.

Los modificadores Overloads y Shadows no pueden utilizarse a la vez con la misma propiedad o método.

Ejemplo

El ejemplo siguiente crea métodos sobrecargados que aceptan una representación String o Decimal de una cantidad en dólares y devuelven una cadena que contiene los impuestos sobre ventas.

Para utilizar este ejemplo para crear un método sobrecargado

  1. Abra un nuevo proyecto y agregue una clase denominada TaxClass.

  2. Agregue el código siguiente a la clase TaxClass.

    Public Class TaxClass
        Overloads Function TaxAmount(ByVal decPrice As Decimal, _
             ByVal TaxRate As Single) As String
            TaxAmount = "Price is a Decimal. Tax is $" & _
               (CStr(decPrice * TaxRate))
        End Function
    
        Overloads Function TaxAmount(ByVal strPrice As String, _
              ByVal TaxRate As Single) As String
            TaxAmount = "Price is a String. Tax is $" & _
               CStr((CDec(strPrice) * TaxRate))
        End Function
    End Class
    
  3. Agregue el procedimiento siguiente a su formulario.

    Sub ShowTax()
        ' 8% tax rate.
        Const TaxRate As Single = 0.08
        ' $64.00 Purchase as a String.
        Dim strPrice As String = "64.00"
        ' $64.00 Purchase as a Decimal.
        Dim decPrice As Decimal = 64
        Dim aclass As New TaxClass
        'Call the same method with two different kinds of data.
        MsgBox(aclass.TaxAmount(strPrice, TaxRate))
        MsgBox(aclass.TaxAmount(decPrice, TaxRate))
    End Sub
    
  4. Agregue un botón al formulario y llame al procedimiento ShowTax desde el evento Button1_Click del botón.

  5. Ejecute el proyecto y haga clic en el botón del formulario para probar el procedimiento sobrecargado ShowTax.

En tiempo de ejecución, el compilador elige la función sobrecargada adecuada que coincida con los parámetros que se utilicen. Al hacer clic en el botón, primero se llama al método sobrecargado con un parámetro Price que es una cadena y se muestra el mensaje: "Price is a String. Tax is $5.12". La segunda vez se llama a TaxAmount con un valor Decimal y se muestra el mensaje, "Price is a Decimal. Tax is $5.12".

Vea también

Conceptos

Sombrear en Visual Basic

Introducción a los objetos en Visual Basic

Invalidar propiedades y métodos

Referencia

Instrucción Sub (Visual Basic)

Shadows

ByVal

ByRef

Overloads

Shadows