Objekte unter .NET klonen

Objekte unter .NET klonen

Standardmäßig enthalten Variablen in .NET nur Referenzen auf Objekte und nicht “die Daten selbst” (abgesehen von “value types”). D.h. übergibt man eine Variable an eine Funktion, dann kann das Objekt, das sich hinter dieser Variable verbirgt, innerhalb der aufgerufenen Funktion dauerhaft verändert werden. Diese Änderung bleibt auch nach Rückkehr aus der Funktion bestehen.

Will man ein Objekt kopieren, so bietet sich folgende Methode an:

using System.Runtime.Serialization.Formatters.Binary;
 
class ObjectHelper
{
   public static object DeepClone(object Object2Clone)
   {
      BinaryFormatter lSerializer = new BinaryFormatter();
      System.IO.MemoryStream lMS = new System.IO.MemoryStream();
      lSerializer.Serialize(lMS,Object2Clone);
      lMS.Position=0;
      return lSerializer.Deserialize(lMS);
   }
}

Eine andere Möglichkeit wäre das Implementieren des ICloneable-Interfaces. Diese Variante ist jedoch mit deutlich mehr Aufwand verbunden und müßte für jede Klasse separat implementiert werden.

Leave a Reply

Your email address will not be published. Required fields are marked *