//Método que pide implementar por ICloneable public object Clone() { ParaClonar objClon = this.MemberwiseClone() as ParaClonar; objClon.Nombre = this.Nombre; objClon.Valor = this.Valor; objClon.detalle = new Detalle(); objClon.detalle.Clase = this.detalle.Clase; //Es un método de ICloneable que permite crear una copia superficial return(objClon); }
static void Main(string[] args) { ParaClonar oC1 = new ParaClonar(); oC1.Nombre = "ejemplo A"; oC1.Valor = 10; oC1.detalle = new Detalle(); oC1.detalle.Clase = "Original"; //Observar que por más que oC2 apunte a oC1, en realidad //estoy clonando, es unca copia ParaClonar oC2 = oC1.Clone() as ParaClonar; oC2.Nombre = "ejemplo B"; oC2.detalle.Clase = "Copia"; //El nombre va a cambiar, pero que hice un Clon, el número al no sobreescribirlo, toma el valor del primero //con el arreglo en CLONE eso se resuelve Console.WriteLine("Texto 1: " + oC1.Nombre + " Valor 1: " + oC1.Valor + "Clase: " + oC1.detalle.Clase); Console.WriteLine("Texto 2: " + oC2.Nombre + " Valor 2: " + oC2.Valor + "Clase: " + oC2.detalle.Clase); }