In the past, I’ve had to put a type specific clone in each cloneable class, but with extension methods you can write a generic T specific clone
class Program
{
static void Main(string[] args)
{
var b = new Blah() {X = 1, Y = 2};
var bb = b.Clone();
Console.WriteLine(string.Format("{0} {1}", bb.X, bb.Y));
}
}
public class Blah : ICloneable
{
public int X;
public int Y;
object ICloneable.Clone()
{
return MemberwiseClone();
}
}
public static class CloneExtension
{
public static T Clone<T>(this T o) where T : ICloneable
{
return (T)o.Clone();
}
}