Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
oByRef
, 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
Abra un nuevo proyecto y agregue una clase denominada
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 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
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.
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.