![]() |
Languages »
C# »
How To
Beginner
License: The Common Development and Distribution License (CDDL)
Object Cloning at its simplestBy Rahul D.A reusable static class to clone objects, not specific to TYPE of the object |
C# (C#1.0, C#2.0, C#3.0), .NET (.NET2.0, .NET3.0), Visual-Studio (VS2005), Dev
|
||||||||
|
Advanced Search Add to IE Search |
|
|
|
||||||||||||||||
This article is about Cloning an object without having to implement ICloneable. And this class can be reused in any (C#) projects because it can clone any object of any TYPE that you specify.
After a huge overnight coding of my project, I suddenly realize, oh! such a big class with so many members. How do I clone it? and I haven't implemented my base class ICloneable. Then I googled and I found all examples showing how to implement ICloneable interface, in codeproject itself I found an article showing the way of using Serialization method. But then this method I had to copy-paste in all the classes. Then I thought of generic(template) class.
The first step is to create class. In order to do that, we need to declare the class and create a method as a template/generic definition by adding the generic type parameter <T>
/*
* By - Rahul Dantkale
* Company - Indigo Architects
*
*/
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
public static class ObjectClone
{
public static T Clone<T>(T RealObject)
{
using (Stream objectStream = new MemoryStream())
{
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(objectStream, RealObject);
objectStream.Seek(0, SeekOrigin.Begin);
return (T)formatter.Deserialize(objectStream);
}
}
}
Note that, the object which can be cloned by this method, the type of that object has to be marked as Serializable like,
[Serializable]
public class MyClassToClone()
{
...
The reason is, to clone the object I am using Serialization method which serializes memory stream, read the binary data and de-serialize to form object, I typecast it and return the object.
Take a look at source code attached with the article, it's easy to digest.
This made me to learn Serialization and deserialization using System.Runtime.Serialization and Binary formatter in System.Runtime.Serialization.Formatters.Binary libraries. Using this I am now able to zip in memory to save space. (probably you'll need other libraries to zip and unzip but this article is not about it).
| You must Sign In to use this message board. | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
General
News
Question
Answer
Joke
Rant
Admin
Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads.
|
PermaLink |
Privacy |
Terms of Use
Last Updated: 28 Feb 2008 Editor: |
Copyright 2008 by Rahul D. Everything else Copyright © CodeProject, 1999-2010 Web20 | Advertise on the Code Project |