Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

cosa extraña con byval

0 views
Skip to first unread message

Hugo Gsell

unread,
Nov 8, 2009, 11:53:14 AM11/8/09
to
tengo una clase con una estructura de datos defdatDatos
luego una funci�n para grabar datos GrabaDatos que recibe como ByVal
una variable tipo defdatDatos

en la llamada a la funcion tengo una variable K tipo defdatDatos donde
esta clase tiene un dato ID que cuando llamo a GrabaDatos va con 0 (cero)
Internamente se calcula un nuevo ID y se lo asigna al nombre local de la
funcion GrabaDatos... cuando vuelve de la llamada k.id TIENE EL VALOR
QUE MODIFIQUE en GrabaDatos!!!!!!!!!!!1
Como si fuera que esta como byref.....
Utilizo visual basic .net 2008

Ya revis� todo.... no se que hacer....
igual lo puedo solucionar... es mas.... es el comportamiento que deseo y
justamente cuando voy a la funci�n para ver/ponerle el byref veo que
esta con byval pero se comporta como byref

Hugo

Alberto Poblacion

unread,
Nov 8, 2009, 12:59:35 PM11/8/09
to
"Hugo Gsell" <hag...@hotmail.com> wrote in message
news:ug%23yBQJY...@TK2MSFTNGP02.phx.gbl...

> ... cuando vuelve de la llamada k.id TIENE EL VALOR QUE MODIFIQUE en
> GrabaDatos!!!!!!!!!!!1
> Como si fuera que esta como byref.....

Lo que acabas de llamar "estructura defdatDatos", en realidad lo tienes
definido como una Clase, y no como una estructura, �verdad?
En ese caso, se compila como un objeto tipo-referencia, no como un
objeto tipo-valor. Eso significa que tu "variable" no tiene los datos, sino
una referencia al lugar donde realmente se encuentran los datos (el "heap").
Cuando una variable tipo-referencia la pasas con ByVal, lo que pasas es
el "valor de la referencia" (y si pones ByRef se pasa una "referencia a la
referencia"). En otras palabras, el ByVal pasa una copia del valor de la
variable, que es una copia del puntero que apunta al area de datos. Si
cambias los datos a trav�s de la copia del puntero, queda cambiada la �nica
copia de esos datos que exist�a en memoria (en el heap), y por tanto se ven
cambiados esos datos a trav�s del puntero original (cuya copia pasaste con
ByVal).
Lo �nico que hace el ByVal es que si cambias el propio puntero dentro de
la subrutina (haciendolo apuntar a otro sitio), entonces no se ve afectado
el puntero original que pasaste, que seguir�a apuntando al mismo sitio.

Hugo Gsell

unread,
Nov 9, 2009, 11:13:57 AM11/9/09
to
gracias... la verdad que despues de tanto tiempo y no ten�a claro eso...
QUE BARBAIDAD!!!

Hugo

El 08/11/2009 14:59, Alberto Poblacion escribi�:

0 new messages