Objekte unter .NET klonen

May 2nd, 2008 by admin

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.

Posted in C#, Development |

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.

Recent Posts

Tags

Calendar

May 2008
M T W T F S S
    Jun »
 1234
567891011
12131415161718
19202122232425
262728293031  

PocketPC

Categories