MSDN da este ejemplo de una copia profunda (http://msdn.microsoft.com/en-us/library/system.object.memberwiseclone.aspx)copia profunda en C#
public class Person
{
public int Age;
public string Name;
public IdInfo IdInfo;
public Person ShallowCopy()
{
return (Person)this.MemberwiseClone();
}
public Person DeepCopy()
{
Person other = (Person) this.MemberwiseClone();
other.IdInfo = new IdInfo(this.IdInfo.IdNumber);
return other;
}
}
Pero, ¿no es un nuevo objeto persona tiene que ser una instancia, y luego regresó? Por ejemplo, ¿este código es aceptable/igual/inferior al código anterior para realizar una copia profunda?
Según entiendo el método MemberwiseClone(), solo realiza una copia superficial, es decir, copia los valores/referencias del objeto copiado a un nuevo objeto. Esto da como resultado una copia superficial ya que las referencias de memoria son iguales, es decir, las referencias apuntan a los mismos objetos.
public class Person
{
public int Age;
public string Name;
public IdInfo IdInfo;
public Person ShallowCopy()
{
return (Person)this.MemberwiseClone();
}
public Person DeepCopy()
{
Person other = new Person(); // difference
other.IdInfo = new IdInfo(this.IdInfo.IdNumber);
return other;
}
}
posible duplicado de [Cómo implementar clonar, copiar método dentro de una clase?] (http://stackoverflow.com/questions/4152733/how-to-implement-clone-and-copy-method-inside-a-class) – Midhat