• Domingo 22 de Diciembre de 2024, 21:58

Autor Tema:  Objeto Object comportandose como tipo por valor??  (Leído 1084 veces)

ach1983

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Objeto Object comportandose como tipo por valor??
« en: Miércoles 13 de Octubre de 2010, 11:19 »
0
Saludos,

tenía entendido que todas las instancias de una clase realmente eran referencias a los distintos objetos,
y que, por ejemplo, al copiar un objeto con una asignación directa, realmente tenemos dos referencias a un
mismo objeto, y por tanto cualquier modificación afectará a las dos referencias.

Precisamente he querido probar esto cno un ejemplo sencillo con objetos de la clase Object, pero me he llevado una sorpresa:

{
     Object o, c;
      o = 5;
      c = o;
      c = 4;
      Console.WriteLine(c); //escribe 4
      Console.WriteLine(o); //escribe 5!! --> Yo esperaba que escribiese 4, al haber modificado el mismo objeto al que apuntan c y o.
      Console.ReadKey();
}

¿Por qué sucede esto?

morringos

  • Miembro activo
  • **
  • Mensajes: 65
  • Nacionalidad: 00
    • Ver Perfil
Re: Objeto Object comportandose como tipo por valor??
« Respuesta #1 en: Domingo 17 de Octubre de 2010, 00:02 »
0
Todos los objectos se pasan por referencia en C#, los datos primitivos se pasan por valor, pero al momento de que tu haces la declaración, lo que estás haciendo es únicamente reservar un espacio en la memoria para dichos objetos, y cuando ya los inicializas, esos objetos, son redireccionados o tienen la dirección del objeto o valor al cual tu los inicializaste. Por ejemplo, tu inicializas el objecto obj1, obj2, entonces, obj1 tendrá la dirección en memoria 101, obj2 tiene la dirección 102 (todo esto es suposición para aclarar el concepto) hasta ahí no tienes ningún valor ni nada por el estilo, pero cuando haces la inicialización como:

"obj1 = 5;"
"obj2 = 6;"

La dirección de obj1 apuntará a la dirección en memoria 201 (por decir así) que es donde se encuentra en memoria el dato 5, y la dirección de obj2 (102) apuntará a la dirección en memoria 202 que es donde se encuentra el dato 6, entonces, los dos objetos están haciendo referencia un dato primitivo, y al momento de ponerle obj2 = obj1, el obj2 apuntará hacia la misma dirección donde apunta obj1, o sea, hacia el dato 5.

Esto es el concepto básico de las instancias u objetos bro, debido a que las variables (mejor dicho) obj1 y obj2 están haciendo referencia a un dato primitivo, éstas se comportan como dichos datos primitivos, en este caso, como enteros, te pongo un ejemplo básico, para que te des cuenta que en realidad se comportan como datos primitivos.

Código: C#
  1.  
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6.  
  7. namespace ObjectTest
  8. {
  9.     class Program
  10.     {
  11.         static void Main(string[] args)
  12.         {
  13.             Object obj1, obj2;
  14.  
  15.             obj1 = 4;
  16.             obj2 = obj1;
  17.  
  18.             Console.WriteLine("El valor del obj1 es : {0}",obj1.ToString());
  19.             Console.WriteLine("El valor del obj2 es: {0}",obj2.ToString());
  20.             Console.WriteLine("nAgregándo a obj2 el valor de 6nn");
  21.             obj2 = 6;
  22.             Console.WriteLine("El valor del obj1 es : {0}", obj1.ToString());
  23.             Console.WriteLine("El valor del obj2 es: {0}", obj2.ToString());
  24.  
  25.             Console.WriteLine("nEl tipo de valor de obj1 es: {0}", obj1.GetType().ToString());
  26.             Console.WriteLine("El tipo de valor de obj2 es: {0}", obj2.GetType().ToString());
  27.  
  28.             Console.ReadLine();
  29.         }
  30.     }
  31. }
  32.  
  33.  
  34.  

Te darás cuenta que en los dos te dirá System.Int32, esto es porque las variables tipo obj, pueden almacenar o compotarse como cualquier tipo de variable