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.
Al sobrecargar un procedimiento, debe usar una firma diferente para cada versión sobrecargada. Esto suele significar que cada versión debe especificar una lista de parámetros diferente. Para obtener más información, vea "Firma diferente" en Sobrecarga de procedimientos.
Puede sobrecargar un Function
procedimiento con un Sub
procedimiento y viceversa, siempre que tengan firmas diferentes. Dos sobrecargas no pueden diferenciarse únicamente porque una tiene un valor de retorno y la otra no.
Puedes sobrecargar una propiedad de la misma manera que sobrecarga un procedimiento y con las mismas restricciones. Sin embargo, no se puede sobrecargar un procedimiento con una propiedad o viceversa.
Alternativas a versiones sobrecargadas
A veces tiene alternativas a las versiones sobrecargadas, especialmente cuando la presencia de argumentos es opcional o su número es variable.
Tenga en cuenta que todos los lenguajes no admiten necesariamente los argumentos opcionales y las matrices de parámetros se limitan a Visual Basic. Si está escribiendo un procedimiento al que es probable que se llame desde código escrito en cualquiera de varios lenguajes diferentes, las versiones sobrecargadas ofrecen la mayor flexibilidad.
Sobrecargas y argumentos opcionales
Si el código de llamada puede proporcionar o omitir uno o varios argumentos, puede definir varias versiones sobrecargadas o usar parámetros opcionales.
Cuándo usar versiones sobrecargadas
Puedes considerar la posibilidad de definir una serie de versiones sobrecargadas en los casos siguientes:
La lógica del código de procedimiento es significativamente diferente en función de si el código de llamada proporciona un argumento opcional o no.
El código de procedimiento no puede probar de forma confiable si el código de llamada ha proporcionado un argumento opcional. Este es el caso, por ejemplo, si no hay ningún candidato posible para un valor predeterminado que no se esperaba que el código de llamada proporcione.
Cuándo usar parámetros opcionales
Es posible que prefiera uno o varios parámetros opcionales en los siguientes casos:
- La única acción necesaria cuando el código de llamada no proporciona un argumento opcional es establecer el parámetro en un valor predeterminado. En tal caso, el código de procedimiento puede ser menos complicado si define una sola versión con uno o varios
Optional
parámetros.
Para obtener más información, vea Parámetros opcionales.
Sobrecargas y ParamArrays
Cuando el código de llamada puede pasar un número variable de argumentos, puede definir varias versiones sobrecargadas o usar una matriz de parámetros.
Cuándo usar versiones sobrecargadas
Puedes considerar la posibilidad de definir una serie de versiones sobrecargadas en los casos siguientes:
Sabes que el código que llama nunca pasa más de un pequeño número de valores a la matriz de parámetros.
La lógica del código de procedimiento es significativamente diferente en función del número de valores que pasa el código de llamada.
El código de llamada puede pasar valores de diferentes tipos de datos.
Cuándo usar una matriz de parámetros
Un parámetro ParamArray
sirve mejor en los casos siguientes:
No puede predecir cuántos valores puede pasar el código de llamada a la matriz de parámetros y podría ser un gran número.
La lógica de procedimiento se presta para recorrer en iteración todos los valores que pasa el código de llamada, realizando esencialmente las mismas operaciones en cada valor.
Para obtener más información, vea Matrices de parámetros.
Sobrecargas implícitas para parámetros opcionales
Un procedimiento con un parámetro Optional es equivalente a dos procedimientos sobrecargados, uno con el parámetro opcional y otro sin él. No se puede sobrecargar este procedimiento con una lista de parámetros correspondiente a ninguno de estos procedimientos. Las siguientes declaraciones ilustran esto.
Overloads Sub q(ByVal b As Byte, Optional ByVal j As Long = 6)
' The preceding definition is equivalent to the following two overloads.
' Overloads Sub q(ByVal b As Byte)
' Overloads Sub q(ByVal b As Byte, ByVal j As Long)
' Therefore, the following overload is not valid because the signature is already in use.
' Overloads Sub q(ByVal c As Byte, ByVal k As Long)
' The following overload uses a different signature and is valid.
Overloads Sub q(ByVal b As Byte, ByVal j As Long, ByVal s As Single)
En el caso de un procedimiento con más de un parámetro opcional, hay un conjunto de sobrecargas implícitas, que llega por lógica similar a la del ejemplo anterior.
Sobrecargas implícitas para un parámetro ParamArray
El compilador considera un procedimiento con un parámetro ParamArray para tener un número infinito de sobrecargas, que difieren entre sí en lo que el código de llamada pasa a la matriz de parámetros, como se indica a continuación:
Una sobrecarga para cuando el código que realiza la llamada no proporciona un argumento a
ParamArray
Una sobrecarga para cuando el código de llamada proporciona una matriz unidimensional del tipo de elemento
ParamArray
Para cada entero positivo, una sobrecarga para cuando el código de llamada proporciona ese número de argumentos, cada uno del tipo de elemento
ParamArray
Las declaraciones siguientes muestran estas sobrecargas implícitas.
Overloads Sub p(ByVal d As Date, ByVal ParamArray c() As Char)
' The preceding definition is equivalent to the following overloads.
' Overloads Sub p(ByVal d As Date)
' Overloads Sub p(ByVal d As Date, ByVal c() As Char)
' Overloads Sub p(ByVal d As Date, ByVal c1 As Char)
' Overloads Sub p(ByVal d As Date, ByVal c1 As Char, ByVal c2 As Char)
' And so on, with an additional Char argument in each successive overload.
No se puede sobrecargar este procedimiento con una lista de parámetros que toma una matriz unidimensional para la matriz de parámetros. Sin embargo, puedes usar las firmas de las demás sobrecargas implícitas. Las siguientes declaraciones ilustran esto.
' The following overload is not valid because it takes an array for the parameter array.
' Overloads Sub p(ByVal x As Date, ByVal y() As Char)
' The following overload takes a single value for the parameter array and is valid.
Overloads Sub p(ByVal z As Date, ByVal w As Char)
Programación sin tipos como alternativa a la sobrecarga
Si desea permitir que el código de llamada pase distintos tipos de datos a un parámetro, un enfoque alternativo es la programación sin tipos. Puedes establecer el modificador Off
de comprobación de tipos en con la opción Option Strict Statement o la opción del compilador -optionstrict. A continuación, no es necesario declarar el tipo de datos del parámetro. Sin embargo, este enfoque tiene las siguientes desventajas en comparación con la sobrecarga:
La programación sin tipos genera código de ejecución menos eficaz.
El procedimiento debe probar cada tipo de datos que prevé recibir.
El compilador no puede indicar un error si el código de llamada pasa un tipo de datos que el procedimiento no admite.
Consulte también
- Procedimientos
- Argumentos y parámetros de procedimiento
- procedimientos de solución de problemas
- Cómo: Definir varias versiones de un procedimiento
- Procedimiento: Llamada a un procedimiento sobrecargado
- Cómo sobrecargar un procedimiento que toma parámetros opcionales
- Cómo: Sobrecargar un procedimiento que toma un número indefinido de parámetros
- Resolución de sobrecarga
- Sobrecargas