Cópia profunda

Autor: Lewis Jackson
Data De Criação: 8 Poderia 2021
Data De Atualização: 25 Junho 2024
Anonim
Cópia profunda - Tecnologia
Cópia profunda - Tecnologia

Contente

Definição - O que significa Deep Copy?

Cópia profunda, em C #, refere-se a uma técnica pela qual uma cópia de um objeto é criada, de modo a conter cópias dos membros da instância e dos objetos apontados pelos membros de referência.

A cópia profunda visa copiar todos os elementos de um objeto, que incluem elementos diretamente referenciados (do tipo valor) e os elementos indiretamente referenciados de um tipo de referência que mantém uma referência (ponteiro) em um local de memória que contém dados em vez de conter o dados em si. A cópia profunda é usada em cenários em que uma nova cópia (clone) é criada sem nenhuma referência aos dados originais.


Uma introdução ao Microsoft Azure e Microsoft Cloud | Neste guia, você aprenderá sobre o que é a computação em nuvem e como o Microsoft Azure pode ajudá-lo a migrar e administrar seus negócios a partir da nuvem.

Techopedia explica Deep Copy

A cópia profunda difere da cópia superficial na maneira como os membros do tipo de referência do objeto são copiados. Ao copiar os membros do campo do tipo value em ambos os casos, é executada uma cópia bit a bit do campo. Ao copiar campos do tipo de referência, a cópia superficial envolve copiar apenas a referência, enquanto na cópia profunda, uma nova cópia do objeto referido é executada.

A cópia detalhada pode ser ilustrada com um exemplo, considerando um objeto Employee tendo AddressInfo como um membro do tipo de referência, juntamente com outros membros do tipo de valor. Uma cópia detalhada de Employee cria um novo objeto, Employee2, com membros do tipo de valor igual a Employee, mas faz referência a um novo objeto, AddressInfo2, que é uma cópia do AddressInfo.

A cópia em profundidade pode ser implementada usando qualquer um dos seguintes métodos:


  • O construtor de cópias da classe pode ser implementado com a lógica necessária para copiar membros dos tipos de valor e referência (após alocação de memória adequada). Este método é tedioso e propenso a erros.
  • O método System.Object.MemberwiseClone pode ser usado para copiar os membros não estáticos do tipo de valor.Cópias de objetos do tipo de referência podem ser criadas e atribuídas com o mesmo conjunto de valores que o original
  • Um objeto que precisa ser copiado em profundidade pode ser serializado e desserializado para um novo objeto, restaurando-o. Esse método é automatizado e não requer alterações de código para modificações nos membros do objeto, mas é mais lento que outros métodos e exige que o objeto clonado seja serializável
  • A reflexão com recursão pode ser usada para obter uma cópia superficial, altura em que o código adicional necessário para a cópia profunda pode ser adicionado. Este método é automatizado e não requer alterações de código para nenhuma adição ou remoção de campos no objeto. É mais lento e não é permitido em ambiente de confiança parcial
  • Código de idioma intermediário pode ser usado, o que é mais rápido, mas resulta em menor legibilidade do código e manutenção difícil

Para implementar a cópia profunda:


  • O objeto deve ser bem definido e não pode ser arbitrário
  • Propriedades do objeto não serão consideradas
  • A clonagem deve ser automatizada com inteligência para casos especiais (como objetos que contêm referências não gerenciadas)