Pregunta

¿Hay alguna manera de utilizar ByRef ParamArray? Aparte de eso, es una solución que no consigue el mismo efecto?

Yo podría hacer algunas sobrecargas, pero estoy tratando de evitar la clunkiness.

Antecedentes:. Porting sobre algún código antiguo, y tratando de mantener la misma estructura tanto como sea posible


editar

Un ejemplo específico de lo que quiero:

Tengo algo de código en TurboBASIC que estoy portar a vb.net. El código ha construido en funciones tales como

Input#1,Data$(I%,1),Data$(I%,2),Data$(I%,3)

¿Dónde entrada () obtiene el archivo # 1 y lee tres piezas de los datos de ella y lo asigna a las tres variables que se muestran. Me gustaría replicar este comportamiento con mi propia función de entrada (). Para hacer eso, ¿cómo iba a disfrutar de tres (o más o menos) variables y valores asignar a ellos?

Lo ideal sería que lograr esto mediante la única modificación de mi propia definición de entrada (), por lo que puedo lodo en el código base tan poco como sea posible.

¿Fue útil?

Solución

Nunca he usado TurboBASIC pero la sintaxis es idéntica a la de VB6 entrada # declaración , así que supongo la semántica también son los mismos.

Este código VB6

Input #1,Data$(I%,1),Data$(I%,2),Data$(I%,3)

Es equivalente a este VB.Net

Input(1,Data$(I%,1))
Input(1,Data$(I%,2))
Input(1,Data$(I%,3))

El VB.Net para actualización convierte la declaración del asistente VB6 Input # como este. Sólo quiero aportar el código como éste, en lugar de aplicar su propia función. La conversión de VB6 a VB.net requiere cambios sustanciales en la base de código, que sería de esperar TurboBASIC a ser aún más exigentes.

Otros consejos

A menos que usted está asignando el parámetro a una nueva instancia de matriz y esperando que la persona que llama (que se pasa una variable o campo) para ver la nueva instancia, que no es necesario ByRef.

Incluso sin ByRef, la persona que llama todavía ver los cambios en el contenido de la matriz. (Las matrices son los tipos de referencia).

Si no ve parameterName = something en el método, no es necesario ByRef.

El punto de un parámetro ParamArray es pasar un array creado implícitamente.
En tales usos, ByRef no puede tener ningún efecto.

Actualmente no existe una manera de pasar por referencia ParamArray en VB.NET. Para pasar una serie de valores especificados a un método que acepta un ParamArray, el CLR se llena una matriz de longitud apropiada con los valores especificados y, a continuación, pasa esta matriz en el método que llamó. No hay manera de copiar todos los valores de la matriz que se ha pasado y de nuevo en las variables originales.

Asumo que usted está portando código de Visual Basic 6 en el que el solamente manera de pasar ParamArray es por referencia, pero que no debería tener ninguna necesidad de esta funcionalidad en .NET.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top