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
oByRef
, 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
Abra un nuevo proyecto y agregue una clase con el nombre
TaxClass
.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
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
Agregue un botón al formulario y llame al procedimiento
ShowTax
desde el eventoButton1_Click
del botón.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" $.