public double MyNumber { get; set; }
public MyObject NestedObject { get; set; }
public MyObject Clone() {
var clone = (MyObject)MemberwiseClone();
if(NestedObject != null) {
clone.NestedObject = NestedObject.Clone();
public static void Main()
var myObject = new MyObject();
myObject.NestedObject = new MyObject();
myObject.NestedObject.MyNumber = 7;
var myClonedObject = (MyObject)myObject.Clone();
myClonedObject.MyNumber = 10;
myClonedObject.NestedObject.MyNumber = 12;
Console.WriteLine(myObject.MyNumber);
Console.WriteLine(myObject.NestedObject.MyNumber);
Console.WriteLine(myClonedObject.MyNumber);
Console.WriteLine(myClonedObject.NestedObject.MyNumber);