• Domingo 17 de Noviembre de 2024, 21:22

Autor Tema:  Problemas con objetos  (Leído 1006 veces)

Garritux

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Problemas con objetos
« en: Viernes 9 de Abril de 2010, 18:46 »
0
Hola, estoy realizando un video juego con C# (XNA). Tengo un problema que ya no se como solucionarlo, el caso es que tengo ciertos attributos que los paso por valor en un metodo y dentro de este metodo me creo una copia porque me hace falta. La question es que dicha copia se sigue modificando con ultimo valor del atributo. No se si me explico, os pongo un ejemplo:

public class Myclass{

  private OtherClass myAttribute;

  public void metodo(OtherClass att){

     myAttribute= att;

 }

}

Pues el atributo "myAttribute" no se queda con el valor de att, se automodifica con el ultimo valor de att (porque ese valor se va modificando en otra clase). Es un poco tedioso de explicar, pero no entiendo por que se modifica la variable si tengo una copia y ya no vuelvo a llamar a ese metodo.

Por favor ayudenme con este problema, porque no encuentro la solución a ello.

Gracias de antemano.

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Problemas con objetos
« Respuesta #1 en: Viernes 9 de Abril de 2010, 20:47 »
0
El problema viene porqe en realidad al hacer la copia, copias la direccion de la variable, no su valor, entonces cada vez que modificas la instancia de OtherClass, automaticamente se refleja ese cambio en myAttribute.

La solucion seria que implementes la interface ICloneable en OtherClass, y luego utilices el metodo Clone() para obtener un duplicado verdadero de la instancia de OtherClass en myAttribute.

Puesto en codigo seria algo como:

Código: C#
  1.  
  2.     public class OtherClass : ICloneable
  3.     {
  4.         public object Clone()
  5.         {
  6.             return MemberwiseClone();
  7.         }
  8.     }
  9.  
  10.     public class Myclass
  11.     {
  12.  
  13.         public OtherClass myAttribute;
  14.  
  15.         public void metodo(OtherClass att)
  16.         {
  17.             myAttribute = (OtherClass)att.Clone();
  18.         }
  19.     }
  20.  
  21.  

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================