Compartir a través de


Propiedades y métodos sobrecargados (Visual Basic)

La sobrecarga se produce cuando se carga más de un procedimiento, constructor de instancias o propiedad en una clase con el mismo nombre pero con diferentes tipos de argumento.

Uso de la sobrecarga

La sobrecarga resulta especialmente útil cuando el modelo de objeto determina que se usen nombres idénticos para procedimientos que funcionan con distintos tipos de datos. Por ejemplo, una clase que puede mostrar varios tipos de datos diferentes podría tener procedimientos Display similares al siguiente:

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 recurrir a una sobrecarga, tendría que crear nombres distintos para cada procedimiento, aunque hicieran lo mismo, 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

Dado que ofrece varios tipos de datos que se pueden usar, con las sobrecargas usar propiedades o métodos es más sencillo. Por ejemplo,el método Display sobrecargado descrito anteriormente puede llamarse 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)

Durante la ejecución, Visual Basic llama al procedimiento adecuado en función de los tipos de datos de los parámetros que especifique.

Reglas de sobrecarga

Para crear un miembro sobrecargado en una clase, agregue 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 listas de parámetros diferentes y los siguientes elementos no se pueden usar como una característica diferenciadora al sobrecargar una propiedad o procedimiento:

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

  • Nombres de parámetros

  • Tipos de valor devueltos de procedimientos

La palabra clave Overloads es opcional durante la sobrecarga, pero si uno de los miembros sobrecargados usa la palabra clave Overloads, a continuación, todos los otros miembros sobrecargados con el mismo nombre deben especificar esta palabra clave.

Las clases derivadas pueden sobrecargar miembros heredados con miembros que tienen parámetros y tipos de parámetros idénticos, un proceso que se conoce como sombreado por nombre y firma. Si, durante el sombreado por nombre y firma, se usa la palabra clave Overloads, la implementación de la clase derivada del miembro se usará en vez de la implementación de clase base y todas las otras sobrecargas para ese 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 sombreado por nombre. El sombreado por nombre reemplaza la implementación heredada de un miembro y hace que todas las sobrecargas no estén disponibles para las instancias de la clase derivada y sus sangrías.

No se pueden usar los modificadores Overloads y Shadows con la misma propiedad o método.

Ejemplo

En el siguiente ejemplo se crean métodos sobrecargados que aceptan una representación String o Decimal por un dólar y devuelven una cadena que contiene el impuesto sobre ventas.

Usar este ejemplo para crear un método sobrecargado

  1. Abra un nuevo proyecto y agregue una clase con el nombre TaxClass.

  2. Agregue el siguiente código 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 al 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 ShowTax sobrecargado.

Durante la ejecución, el compilador elige la función sobrecargada adecuada que coincide con los parámetros que se usan. Al hacer clic en el botón, se llama primero al método sobrecargado con un parámetro Price que es una cadena y el mensaje "Price es una cadena. Se muestra el impuesto 5,12" $. TaxAmount se llama con un valor Decimal, por segunda vez, y el mensaje "Price es un decimal. Se muestra el impuesto 5,12" $.

Consulte también