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 prioridad de la matriz de parámetros para resolver las llamadas a funciones sobrecargadas ha cambiado de Extensiones administradas para C++ a Visual C++.
En Extensiones administradas y en la nueva sintaxis, no hay ninguna compatibilidad explícita para la matriz de parámetros que C# y Visual Basic admiten.En su lugar, una matriz ordinaria se marca con un atributo, del modo siguiente:
void Trace1( String* format, [ParamArray]Object* args[] );
void Trace2( String* format, Object* args[] );
Aunque ambos parezcan iguales, el atributo ParamArray etiqueta esto para C# u otros lenguajes de CLR como una matriz que acepta un número variable de elementos con cada invocación.El cambio en el comportamiento de los programas entre Extensiones administradas y la nueva sintaxis está en la resolución de una función sobrecargada configurada en la que una instancia declara puntos suspensivos y una segunda declara un atributo ParamArray, como en el ejemplo siguiente proporcionado por Artur Laksberg.
int fx(...); // 1
int fx( [ParamArray] Int32[] ); // 2
En Extensiones administradas, los puntos suspensivos tenían prioridad sobre el atributo lo que era razonable ya que el atributo no constituye un aspecto formal del lenguaje.No obstante, en la nueva sintaxis, la matriz de parámetros se admite ahora directamente dentro del lenguaje y tiene prioridad sobre los puntos suspensivos porque está fuertemente tipada.Así, en Extensiones administradas, la llamada
fx( 1, 2 );
se resuelve como fx(…) mientras que en la nueva sintaxis, se resuelve como la instancia ParamArray.En caso de que el comportamiento del programa dependa más de la invocación de la instancia de puntos suspensivos que la de ParamArray, deberá modificar la firma o la llamada.