Creando una copia de un objeto en C # [duplicado]

Posible duplicado:
¿Cómo se hace una copia profunda de un objeto en .Net (C # específicamente)?

Por favor, eche un vistazo al siguiente código (extracto de un libro de C #):

namespace Example {
    class MyClass {
        public int val;
    }

    struct myStruct {
        public int val;
    }

    class Program {
        static void Main(string[] args) {
            MyClass objectA = new MyClass();
            MyClass objectB = objectA;
            objectA.val = 10;
            objectB.val = 20;
            myStruct structA = new myStruct();
            myStruct structB = structA;
            structA.val = 30;
            structB.val = 40;
            Console.WriteLine("objectA.val = {0}", objectA.val);
            Console.WriteLine("objectB.val = {0}", objectB.val);
            Console.WriteLine("structA.val = {0}", structA.val);
            Console.WriteLine("structB.val = {0}", structB.val);
            Console.ReadKey();
        }
    }
}

Entiendo que produce la salida debajo de

objectA.val = 20
objectB.val = 20
structA.val = 30
structB.val = 40

Las últimas dos líneas de la salida no tengo ningún problema, pero las dos primeras me dicen queobjectA yobjectB apuntan al mismo bloque de memoria (ya que en C #, los objetos son tipos de referencia).

La pregunta es cómo hacerobjectB, una copia deobjectA para que apunte a un área diferente en la memoria. Entiendo que tratar de asignar a sus miembros puede no funcionar ya que esos miembros también pueden ser referencias. Entonces, ¿cómo hago para hacerobjectB una entidad completamente diferente deobjectA?

Gracia

Respuestas a la pregunta(4)

Su respuesta a la pregunta