Compartir a través de


Propiedades y métodos sobrecargados (Visual Basic)

La sobrecarga es la creación de más de un procedimiento, constructor de instancia o propiedad en una clase con el mismo nombre, pero tipos de argumentos diferentes.

Uso de la sobrecarga

La sobrecarga es especialmente útil cuando el modelo de objetos dicta que se emplean nombres idénticos para los procedimientos que operan en distintos tipos de datos. Por ejemplo, una clase que puede mostrar varios tipos de datos diferentes podría tener Display procedimientos similares a 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 sobrecargar, tendría que crear nombres distintos para cada procedimiento, aunque hagan 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

La sobrecarga facilita el uso de propiedades o métodos, ya que proporciona una selección de tipos de datos que se pueden usar. Por ejemplo, se puede 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 en función de los tipos de datos de los parámetros que especifique.

Reglas de sobrecarga

Para crear un miembro sobrecargado para una clase, agregue dos o más propiedades o métodos con el mismo nombre. Excepto para 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 Overloads palabra clave es opcional al sobrecargar, pero si algún miembro sobrecargado usa la Overloads palabra clave , todos los demás miembros sobrecargados con el mismo nombre también 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.

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

Ejemplo

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

Usar este ejemplo para crear un método sobrecargado

  1. Abra un nuevo proyecto y agregue una clase denominada 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 siguiente procedimiento 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.

En tiempo de 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, primero se llama al método sobrecargado con un parámetro Price que es una cadena y el mensaje: "Price es una cadena". Se muestra el impuesto de 5,12 USD. TaxAmount se llama con un valor Decimal por segunda vez y el mensaje dice: «Price es un decimal». Se muestra el impuesto de 5,12 USD.

Consulte también