Parámetros por referencia

11/07/2003 - 18:29 por Roberto G.A. | Informe spam
Hola a tod@s, soy nuevo en esto y tengo una duda que
seguro será sencilla.. no para mi :)

El problema es el siguiente:

Es fácil crear una función con un parámetro por referencia:

public void test(string name)
{
name = "Hola";
}

El problema está cuando quiero hacer algo parecido con un
nodo xml como parámetro por referencia. Si lo llamo dentro
de un "foreach" me dice que naiin, pero haciendo la
función sin pasar el parámetro como referencia, ohhh
sopresa la mía al comprobar que se comporta como si lo
hubiera hecho, las modificaciones que hago dentro de la
función afectan al xml DomDocument ñeñeñe

Esto que significa, los objetos xml se pasan por defecto
como referencia? estoy soñando? seguro que es algo que
estoy pasando por alto, algunda idea??????

Gracias de antemano,
Saludos

Preguntas similare

Leer las respuestas

#1 William Fernández
11/07/2003 - 18:56 | Informe spam
public void test(ref string name)
{
test = name;
}


"Roberto G.A." escribió en el mensaje
news:004a01c347c9$a75f38e0$
Hola a , soy nuevo en esto y tengo una duda que
seguro será sencilla.. no para mi :)

El problema es el siguiente:

Es fácil crear una función con un parámetro por referencia:

public void test(string name)
{
name = "Hola";
}

El problema está cuando quiero hacer algo parecido con un
nodo xml como parámetro por referencia. Si lo llamo dentro
de un "foreach" me dice que naiin, pero haciendo la
función sin pasar el parámetro como referencia, ohhh
sopresa la mía al comprobar que se comporta como si lo
hubiera hecho, las modificaciones que hago dentro de la
función afectan al xml DomDocument ñeñeñe

Esto que significa, los objetos xml se pasan por defecto
como referencia? estoy soñando? seguro que es algo que
estoy pasando por alto, algunda idea??????

Gracias de antemano,
Saludos
Respuesta Responder a este mensaje
#2 Diego Gonzalez
11/07/2003 - 20:39 | Informe spam
Puedes también usar el modificador out que, en tiempo de compilación obliga
al método llamado a asignar un valor al parámetro, y evita que el llamador
tenga que asignar un valor antes de llamar.

public void test(out string name)
{
test = name;
}

Suerte,
Diego González
Lagash Systems SA

"William Fernández" wrote in message
news:#


public void test(ref string name)
{
test = name;
}


"Roberto G.A." escribió en el mensaje
news:004a01c347c9$a75f38e0$
Hola a , soy nuevo en esto y tengo una duda que
seguro será sencilla.. no para mi :)

El problema es el siguiente:

Es fácil crear una función con un parámetro por referencia:

public void test(string name)
{
name = "Hola";
}

El problema está cuando quiero hacer algo parecido con un
nodo xml como parámetro por referencia. Si lo llamo dentro
de un "foreach" me dice que naiin, pero haciendo la
función sin pasar el parámetro como referencia, ohhh
sopresa la mía al comprobar que se comporta como si lo
hubiera hecho, las modificaciones que hago dentro de la
función afectan al xml DomDocument ñeñeñe

Esto que significa, los objetos xml se pasan por defecto
como referencia? estoy soñando? seguro que es algo que
estoy pasando por alto, algunda idea??????

Gracias de antemano,
Saludos


Respuesta Responder a este mensaje
#3 William Fernández
11/07/2003 - 21:29 | Informe spam
Diego disculpa como puedo hacer para comunicarme contigo...
Te trate de enviar un mensaje a tu mail, pero me lo devuelve.
Si puedes enviarme uno tú con tu direccion.

Gracias.

TSU. William Fernández
Analista de Sistemas
Lab. Behrens.
Caracas - Venezuela
Telf. 58-212-7315250
EMail:


"Diego Gonzalez" escribió en el mensaje
news:
Puedes también usar el modificador out que, en tiempo de compilación


obliga
al método llamado a asignar un valor al parámetro, y evita que el llamador
tenga que asignar un valor antes de llamar.

public void test(out string name)
{
test = name;
}

Suerte,
Diego González
Lagash Systems SA

"William Fernández" wrote in message
news:#
>
>
> public void test(ref string name)
> {
> test = name;
> }
>
>
> "Roberto G.A." escribió en el mensaje
> news:004a01c347c9$a75f38e0$
> Hola a , soy nuevo en esto y tengo una duda que
> seguro será sencilla.. no para mi :)
>
> El problema es el siguiente:
>
> Es fácil crear una función con un parámetro por referencia:
>
> public void test(string name)
> {
> name = "Hola";
> }
>
> El problema está cuando quiero hacer algo parecido con un
> nodo xml como parámetro por referencia. Si lo llamo dentro
> de un "foreach" me dice que naiin, pero haciendo la
> función sin pasar el parámetro como referencia, ohhh
> sopresa la mía al comprobar que se comporta como si lo
> hubiera hecho, las modificaciones que hago dentro de la
> función afectan al xml DomDocument ñeñeñe
>
> Esto que significa, los objetos xml se pasan por defecto
> como referencia? estoy soñando? seguro que es algo que
> estoy pasando por alto, algunda idea??????
>
> Gracias de antemano,
> Saludos
>
>


Respuesta Responder a este mensaje
#4 Crosio, Pablo
12/07/2003 - 04:32 | Informe spam
William:

Lo que sucede es que las variables que contienen tipos por referencia, lo
que almacenan en realidad es un "apuntador" a la dirección de memoria en
donde se encuentra ubicado el valor o la información de la variable.
Las variables que utilizás para almacenar los objetos xml son un ejemplo...
y es por ello que sucede lo que comentás
Cuando pasás la variable a la función, en realidad estás pasando la
referencia y si modificás algún dato en tu DomDocument, estás modificando la
información apuntada por la referencia que pasás a la función...
La diferencia entre pasar la variable o no anteponiendo "ref" radica en que
en el caso de hacerlo, podés cambiar la referencia misma del apuntador y al
regresar de la función, éste habrá cambiado; si no lo hacés, por más que
cambies la referencia para apuntar a otra cosa, el cambio no tiene efecto al
salir de la función...

Por ejemplo si tenés:

void test(una_clase o)
{
o.un_metodo();
o.prop = 1;
o = null;
}

y

void test(ref una_clase o)
{
o.un_metodo();
o.prop = 1;
o = null;
}

En el primer caso cuando vuelvas de la función, la referencia pasada no
variará y habrás cambiado la propiedad prop del objeto (aunque no lo pases
con ref).
En el segundo caso, cuando se vuelva de la función y se quieras utilizar la
variable pasada, verás que tiene null

La clase string aunque sea un tipo por referencia, para estos casos
funciona como un tipo por valor

Espero se haya entendido algo :) !!!!

Salu2!!!

Pablo



"William Fernández" wrote in message
news:#


public void test(ref string name)
{
test = name;
}


"Roberto G.A." escribió en el mensaje
news:004a01c347c9$a75f38e0$
Hola a , soy nuevo en esto y tengo una duda que
seguro será sencilla.. no para mi :)

El problema es el siguiente:

Es fácil crear una función con un parámetro por referencia:

public void test(string name)
{
name = "Hola";
}

El problema está cuando quiero hacer algo parecido con un
nodo xml como parámetro por referencia. Si lo llamo dentro
de un "foreach" me dice que naiin, pero haciendo la
función sin pasar el parámetro como referencia, ohhh
sopresa la mía al comprobar que se comporta como si lo
hubiera hecho, las modificaciones que hago dentro de la
función afectan al xml DomDocument ñeñeñe

Esto que significa, los objetos xml se pasan por defecto
como referencia? estoy soñando? seguro que es algo que
estoy pasando por alto, algunda idea??????

Gracias de antemano,
Saludos


Respuesta Responder a este mensaje
#5 Crosio, Pablo
12/07/2003 - 05:29 | Informe spam
Perdón, iba dirigido a Roberto!

"Crosio, Pablo" wrote in message
news:

William:

Lo que sucede es que las variables que contienen tipos por referencia, lo
que almacenan en realidad es un "apuntador" a la dirección de memoria en
donde se encuentra ubicado el valor o la información de la variable.
Las variables que utilizás para almacenar los objetos xml son un


ejemplo...
y es por ello que sucede lo que comentás
Cuando pasás la variable a la función, en realidad estás pasando la
referencia y si modificás algún dato en tu DomDocument, estás modificando


la
información apuntada por la referencia que pasás a la función...
La diferencia entre pasar la variable o no anteponiendo "ref" radica en


que
en el caso de hacerlo, podés cambiar la referencia misma del apuntador y


al
regresar de la función, éste habrá cambiado; si no lo hacés, por más que
cambies la referencia para apuntar a otra cosa, el cambio no tiene efecto


al
salir de la función...

Por ejemplo si tenés:

void test(una_clase o)
{
o.un_metodo();
o.prop = 1;
o = null;
}

y

void test(ref una_clase o)
{
o.un_metodo();
o.prop = 1;
o = null;
}

En el primer caso cuando vuelvas de la función, la referencia pasada no
variará y habrás cambiado la propiedad prop del objeto (aunque no lo pases
con ref).
En el segundo caso, cuando se vuelva de la función y se quieras utilizar


la
variable pasada, verás que tiene null

La clase string aunque sea un tipo por referencia, para estos casos
funciona como un tipo por valor

Espero se haya entendido algo :) !!!!

Salu2!!!

Pablo



"William Fernández" wrote in message
news:#
>
>
> public void test(ref string name)
> {
> test = name;
> }
>
>
> "Roberto G.A." escribió en el mensaje
> news:004a01c347c9$a75f38e0$
> Hola a , soy nuevo en esto y tengo una duda que
> seguro será sencilla.. no para mi :)
>
> El problema es el siguiente:
>
> Es fácil crear una función con un parámetro por referencia:
>
> public void test(string name)
> {
> name = "Hola";
> }
>
> El problema está cuando quiero hacer algo parecido con un
> nodo xml como parámetro por referencia. Si lo llamo dentro
> de un "foreach" me dice que naiin, pero haciendo la
> función sin pasar el parámetro como referencia, ohhh
> sopresa la mía al comprobar que se comporta como si lo
> hubiera hecho, las modificaciones que hago dentro de la
> función afectan al xml DomDocument ñeñeñe
>
> Esto que significa, los objetos xml se pasan por defecto
> como referencia? estoy soñando? seguro que es algo que
> estoy pasando por alto, algunda idea??????
>
> Gracias de antemano,
> Saludos
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida