Autor Tema: Dudas tipo valor y tipo referencia POO paso parámetros por valor y referencia C#  (Leído 4043 veces)

Sixtoex

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 105
    • Ver Perfil
A ver yo lo entiendo de tal forma y a ver si lo entendí bien..

Tipo valor:

Código: [Seleccionar]
static void Incrementar(int param)
{

param++;
}
static void Main()
{
int arg = 42;
Incrementar(arg);
console.writeline(arg);

}

Mi conclusión: Escribe 42 y no 43, entonces mi manera de entenderlo:

int arg = 42 ---> Aquí crea un ESPACIO en memoría con el valor 42
Incrementar(arg) ---> Aquí el espacio sigue siendo el mismo en memoria, es decir 42
static void Incrementar(int param): Aquí crea un NUEVO ESPACIO en memoria con el valor 0 y cuando se llama al método ese valor 0 aumenta en 1, pero aumenta en 1 el espacio de memoria que a sido creado con el int param, osea es totalmente independiente  de arg. ¿creo que lo entendí perfectamente o nanai?  ;D ;D ;D
Es decir, param = 1, y arg = 42, por que son totalmente INDEPENDIENTES

Si el ejercicio anterior lo hubieramos hecho por REFERENCIA, no seria el resultado 42, si no 1.  :) Es decir param valdría 1 y arg = 1

Si estoy en lo cierto, entonces creo que lo comprendí ESTUPENDAMENTE  :-X


Ahora parametros Ref:
Código: [Seleccionar]
static void Incrementar(ref int param)
{

param++;
}
static void Main()
{
int arg = 42;
Incrementar( ref arg);
console.writeline(arg);

}

El valor que imprime es 43 ¿por que? por que el valor de param ahora es de referencia es decir coge el valor que tiene arg y desde un principio tiene el valor 42, y al hacer param++; toma el valor 43 por que los 2 son de referencia la dirección va al mismo sitio con el mismo valor(43):  creo que también lo entendí perfecto  :)

y con el parametro out, significa que sacamos a FUERA del método el valor del parametro es decir, en el ejemplo anterior daría error ya que no se puede aumentar la variable param ya que no tiene NINGUN valor, pero si ponemos param = 32; se mostraría en consola 32
« Última modificación: 05 de Noviembre 2014, 09:28 por Alex Rodríguez »

Gilding

  • Sin experiencia
  • *
  • Mensajes: 44
    • Ver Perfil
Re:Dudas tipo valor y tipo referencia POO
« Respuesta #1 en: 04 de Noviembre 2014, 17:15 »
Hola Sixtoex.

Tal vez no sea el más indicado para resolver tu duda... todavía jejeje. Pero voy a intentar arrojar un poco de luz sobre el tema. De todos modos espera a la respuesta de un moderador.

De entrada te recomiendo que revises este tema https://www.aprenderaprogramar.com/index.php?option=com_content&view=article&id=144:modulos-genericos-y-paso-de-parametros-por-valor-byval-o-por-referencia-byref-ejemplos-cu00207a&catid=36:curso-qbases-de-la-programacion-nivel-iiq&Itemid=60 del cursos Fundamentos de programación nivel II.

Lo has entendido bastante bien, aunque hay un pequeño pero que me gustaría aclararte. Cuando tu le pasas una variable a una función/método/módulo (o como lo quieras llamar) este método realiza sus operaciones y obtienes como resultado:
1.- Si es por valor: la variable original que le has pasado no se modificará.
2.- Si es por referencia: la variable original que le has pasado tomará el valor final de los cálculos que ha realizado dicho método. Modificando entonces el valor de dicha variable.

Te pongo un par de ejemplos utilizando tu código para que lo veas de otra forma.

Por valor:
Código: [Seleccionar]
static void Incrementar(int param)
{

   param++;
   return param;

}

static void Main()
{
   int arg = 42;
   int resultado = 0;

   resultado = Incrementar(arg);
   console.writeline(arg);
   console.writeline(resultado);
}

Por referencia:
Código: [Seleccionar]
static void Incrementar(ref int param)
{

   param++;
   return param;

}

static void Main()
{
   int arg = 42;
   int resultado = 0;

   resultado = Incrementar(ref arg);
   console.writeline(arg);
   console.writeline(resultado);
}

Pruebalos y verás los resultados. (Puede que haya algún error de sintaxis puesto que este no es precisamente el lenguaje del que más conocimientos tengo jejeje).

Un saludo!

Sixtoex

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 105
    • Ver Perfil
Re:Dudas tipo valor y tipo referencia POO
« Respuesta #2 en: 04 de Noviembre 2014, 19:07 »
Yo me creía que param siempre tenía el valor 0 cada vez que inicializa  :o :o :o  :-\

Es decir estaba equivocado, pero ya con tu primer ejemplo conseguí entenderlo aun mejor

Solo quiero decir que si alguien tiene la misma duda que tenía yo, le aconsejo que mire los códigos del usuario Gilding  8)

Sobre los errores de sintaxis, si existe unos cuantos jaja, pero ni problema ;D
Muchas gracias amigo

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".