Profonde clonage des objets

Je veux faire quelque chose comme:

MyObject myObj = GetMyObj(); //Create and fill a new object
MyObject newObj = myObj.Clone();

Et apporter des modifications pour le nouvel objet qui ne sont pas reflétés dans l'objet d'origine.

Je n'ai pas souvent besoin de cette fonctionnalité, donc quand il a été nécessaire, j'ai eu recours à la création d'un nouvel objet, puis de le copier chaque propriété individuellement, mais il me laisse toujours avec le sentiment qu'il existe une meilleure ou la plus élégante façon de gérer la situation.

Comment puis-je cloner ou copie en profondeur d'un objet, de sorte que l'objet cloné peut être modifiée sans changements, qui se reflète dans l'objet d'origine?

  • Peut être utile: "Pourquoi la Copie d'un Objet est une chose terrible à faire?" agiledeveloper.com/articles/cloning072002.htm
  • stackoverflow.com/questions/8025890/... une Autre solution...
  • Vous devriez jeter un oeil à AutoMapper
  • Votre solution est beaucoup plus complexe, j'ai perdu le lire... hehehe. Je suis à l'aide d'un DeepClone interface. public interface IDeepCloneable<T> { T DeepClone(); }
  • Une préoccupation que j'ai, avec IDeepCloneable est que pas toutes les collections de références à des choses qui peuvent être profondément clonés doivent être; le bon comportement lors du clonage d'un List<T> ne dépend pas seulement sur T, mais aussi sur le but de la liste. Si aucun des éléments dans les listes seront jamais exposés à tout ce qui muter, alors même si les éléments dans les listes pourrait être cloné, il serait préférable de copier les références directement.
  • Cette question est également abordée ici stackoverflow.com/q/129389/235715
  • Cependant, il est intéressant de noter que l'article finit par dire à créer un clone méthode de la classe, puis de l'appel interne, constructeur privé qui est passée this. Si la copie est turrible [sic], mais la copie soigneusement (et l'article est certainement la peine de lire) ne l'est pas. ;^)
  • Si vous avez besoin de ce vous avez peut-être mal mise en œuvre. Et si vous utiliser l'injection de dépendance, il ne fait pas de sens.
  • À cette fin, à cette question, toutes les réponses sont à peu près aussi utile que "Comment puis-je code une classe?" Il y a beaucoup de réponses, mais il n'y a pas qu'une seule bonne réponse, malgré les votes. Ce n'est PAS à dire qu'aucune réponse n'est utile ou la question n'est pas le travail lui demander, mais méfiez-vous des lunettes polarisantes réponses. Le plus grand déficit d'ici l'accent est mis sur la fourniture d'une documentation détaillée et pour l'utilisateur/responsable de l'implémentation d'une classe de prendre la responsabilité de comprendre les détails de l'opération de copie.
  • Pourquoi ne pas simplement obtenir une nouvelle instance? Ou si vous voulez copier un objet que vous avez modifié plutôt que de simplement instancié vous pouvez ainsi créer une méthode qui fait tout cela, et il suffit d'appeler la méthode à deux reprises.
  • Appelez le MemberwiseClone méthode pour créer une copie d'un objet, puis affecter les nouveaux objets dont les valeurs sont les mêmes que l'original, objet de toutes les propriétés ou les champs dont les valeurs sont des types référence. Le Propriétédeepcopy méthode dans l'exemple qui illustre cette approche. msdn.microsoft.com/en-us/library/...
  • Cochez cette Répondre: stackoverflow.com/a/52097307/4707576 à propos de: le Clonage des objets sans Sérialisation

InformationsquelleAutor NakedBrunch | 2008-09-17