Necesito implementar constructores de copia profunda en C # con herencia. ¿Qué patrones hay para elegir?

Deseo implementar una copia en profundidad de la jerarquía de mis clases en C #

public Class ParentObj : ICloneable
{
    protected int   myA;
    public virtual Object Clone ()
        {
             ParentObj newObj = new ParentObj();
             newObj.myA = theObj.MyA;
             return newObj;
        }
}

public Class ChildObj : ParentObj
{
    protected int   myB;
    public override Object Clone ( )
        {
             Parent newObj = this.base.Clone();
             newObj.myB = theObj.MyB;

             return newObj;
        }
}

Esto no funcionará como cuando Cloning the Child solo un padre es nuevo. En mi código algunas clases tienen jerarquías grandes.

¿Cuál es la forma recomendada de hacer esto? ¿Clonar todo en cada nivel sin llamar a la clase base parece incorrecto? Debe haber algunas soluciones claras para este problema, ¿cuáles son?

¿Puedo agradecer a todos por sus respuestas? Fue realmente interesante ver algunos de los enfoques. Creo que sería bueno que alguien diera un ejemplo de una respuesta de reflexión para completarla. +1 en espera!

Respuestas a la pregunta(8)

Su respuesta a la pregunta