Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

Object Cloning Using Generic in C#

0.00/5 (No votes)
20 Apr 2008 1  
This utility creates a new instance of your class using generic.

Introduction

In one of my project I came across a situation which I needed to make a clone of an object and unfortunately C# doesn’t have such utility or maybe there is and simply I don’t know yet! Anyway, first I started with MSDN and look at the ICloneable interface … and then I find some interesting articles like this one: Base class for cloning an object in C#. However I finally decided to write my own Cloning Class using generic and XmlSerializer! The CloneManager is a simple class that can create a new instance of any class. Moreover your class doesn’t require having any attribute decoration!

Using the code

All you have to do is to add reference to CloneManager project and create an instance of this class in your source code as shows below.

Code Example:

  //Create an instance of clone manager
  IClone cloneManager = new CloneManager();

  MyClass newInstance = cloneManager.Clone(instance);

Implementation

The CloneManager implements IClone interface which exposes only one method. The Clone method simply serialize the instance into a memory stream and deserialize this stream to a new instance of object using XmlSerializer and returns that to the caller.

    
public interface IClone 
{ 
    T Clone(T instance) where T : class; 
}



using System;
using System.Xml.Serialization;
using System.IO;

namespace Demo.Clone
{
    public class CloneManager:IClone
    {
        /// Clones the specified instance. 
        /// Returns a new instance of an object.
        T IClone.Clone(T instance){
            XmlSerializer serializer = new XmlSerializer(typeof(T));
            MemoryStream stream = new MemoryStream();
            serializer.Serialize(stream, instance);
            stream.Seek(0, SeekOrigin.Begin);
            return serializer.Deserialize(stream) as T;
        }
    }
}



Happy coding!

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here