C#, Recursividad y Stack????

12/11/2003 - 03:00 por Alejandro Tamayo | Informe spam
En otros lenguajes de programación como Pascal, por mencionar alguno, si se
crea una función que se llame recursivamente, los valores de los parámetros
se copian por tantos niveles tenga la recursividad. pero en C# cuando
hago esto con alguna clase definida por mi o simplemente con un arreglo, los
valores sde pasan como si fueran por referencia, es decir, si efectuo una
modificación en el nivel 10 de la recursividad, se le aplica a toda la
variable, y no he declarado ningun parametro como ref o out.

Es que C# está diseñado así? Hay alguna manera de que un arreglo que pase
por parámetro en un metodor recursivo se pase por valor?

Es decir:

void Metodo (int nivel, byte[] arreglo)
{
if (nivel==0) return; // Cualquier modificación al arreglo que yo haga
desde aqui se refleja hacia arriba.
Metodo(n-1,arreglo);
}

En C# el Stack o Pila de un metodo no pincha al igual que en Pascal o C++?
 

Leer las respuestas

#1 Michael Giagnocavo [MVP]
12/11/2003 - 05:25 | Informe spam
Eso depende del tipo que estas pasando. Si pasas un int (no por ref ni
out), los cambios no veras. Pero, si pasas un reference type (un objeto),
entonces solo se pasa la referencia a ese objeto. Si usas ref o out, estas
pasando una referencia a la referencia. byte[] es un System.Array, y es un
reference type.

Esto es para ahorrar recursos. Si quieres, cuando pasas tu byte[], puedes
hacer una copia y pasar eso. Por supuesto, consume mas memoria.

-mike
MVP

"Alejandro Tamayo" wrote in message
news:
En otros lenguajes de programación como Pascal, por mencionar alguno, si


se
crea una función que se llame recursivamente, los valores de los


parámetros
se copian por tantos niveles tenga la recursividad. pero en C# cuando
hago esto con alguna clase definida por mi o simplemente con un arreglo,


los
valores sde pasan como si fueran por referencia, es decir, si efectuo una
modificación en el nivel 10 de la recursividad, se le aplica a toda la
variable, y no he declarado ningun parametro como ref o out.

Es que C# está diseñado así? Hay alguna manera de que un arreglo que pase
por parámetro en un metodor recursivo se pase por valor?

Es decir:

void Metodo (int nivel, byte[] arreglo)
{
if (nivel==0) return; // Cualquier modificación al arreglo que yo haga
desde aqui se refleja hacia arriba.
Metodo(n-1,arreglo);
}

En C# el Stack o Pila de un metodo no pincha al igual que en Pascal o C++?


Preguntas similares