Copia profunda es un término utilizado para describir el proceso de copiar un objeto y toda su jerarquía de objetos hijos. Una copia profunda creará una nueva instancia de un objeto, y también copiará todos los objetos hijos y su jerarquía de objetos hijos. Esto contrasta con una copia superficial, que sólo copiará el objeto de nivel superior y sus hijos inmediatos. ¿Es la copia de un array una copia profunda? No, una copia de array no es una copia profunda. Una copia profunda copia todos los campos de un objeto, incluyendo cualquier objeto anidado. Una copia de array sólo copia los elementos de nivel superior de un array. ¿Es el operador spread una copia profunda? El operador spread (...) se utiliza para crear una copia superficial de un array u objeto. Copia los valores del objeto o array en un nuevo objeto o array, respectivamente. Sin embargo, no copia objetos o arrays anidados.
¿Cómo se hace una copia profunda de un objeto en C#?
Hay dos formas de copiar en profundidad un objeto en C#:
1. Utilizar el método System.Object.MemberwiseClone. Este método crea una copia superficial del objeto, lo que significa que el nuevo objeto tendrá los mismos valores para los tipos de referencia del objeto que el objeto original. Sin embargo, el nuevo objeto no tendrá una referencia a los tipos de referencia del objeto original.
2. Utilice el método System.Runtime.Serialization.FormatterServices.GetUninitializedObject. Este método crea una copia profunda del objeto, lo que significa que el nuevo objeto tendrá su propia copia de los tipos de referencia del objeto.
¿Qué es una copia profunda vs superficial?
Una copia profunda es una copia de un objeto en la que todos los campos del objeto, y todos los campos de sus subobjetos, se copian recursivamente. Una copia superficial es una copia de un objeto en la que sólo se copian los campos de nivel superior del objeto. ¿La copia de un array cuenta como copia profunda? No, una copia de matriz no es una copia profunda. Una copia profunda crearía un nuevo array con todos los mismos elementos que el array original, mientras que una copia de array simplemente copia las referencias a los elementos del array original.