Cambio en Variable ByVal.

08/09/2006 - 21:41 por malehernandez | Informe spam
Hola a todos, quisiera saber si me pueden ayudar a entender esto, es en
ASP 2.0 con VB 2005:

Tengo una función en una dll, dentro de "MiClase"

Public UnaFuncion(ByVal DS as DataSet) as DataSet

'Cambia DS
Return DS
End Function


Esta función procesa un DataSet que está en sesión. Todas las
llamadas a esta función desde las páginas estan bien...

Dim MC as New MiClase
Session("MiDataSet")=UnaFuncion(Session("MiDataSet"))

...Menos una, donde no se asigna el resultado de la función a nada:

Dim MC as New MiClase
UnaFuncion(Session("MiDataSet"))

Si no estoy asignando el retorno de la función a la variable de
sesión, y el parámetro se recibe ByVal, ¿Por que es que los cambios
realizados al DataSet dentro de la función se reflejan cuando
posteriormente recupero el DataSet desde la Session?

Gracias, Saludos.

Preguntas similare

Leer las respuestas

#1 Eduardo A. Morcillo [MS MVP VB]
09/09/2006 - 07:04 | Informe spam
Tienes que leer un poco sobre tipos por valor y tipos por referencia. Para
hacerlo simple, los tipos por valor son todos los tipos basicos, las
enumeraciones y las estructuras. Todos los demas son tipos por referencia.
Cuando pasas un tipo por valor como ByVal lo que se hace es realizar una
copia del valor y luego pasarla a la funcion. Cuando es ByRef lo que se hace
es pasar la ubicacion en memoria del valor sin realizar una copia. Con los
tipos por referencia el comportamiento es el mismo pero en este caso lo que
se copia (si es ByVal) y pasa es una referencia y no el valor mismo. Por eso
cuando pasas el DataSet no se genera una copia del DataSet sino que se
genera una copia de la referencia que devuelve Session y las dos referencias
apuntan a un mismo objeto.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida