MemberwiseClone est pratique, certes, mais elle ne duplique pas les propriétés et fields de type reference : l'objet cloné pointe sur les mêmes objets...
Il est bien sur de définir la méthode Clone pour chacun des 'enfant', et les appeler les uns après les autres.
seulement, si vous ajouter un champs, il faudra penser a modifier en conséquence votre méthode Clone...
je vous propose donc cette classe, a utiliser en tant que classe de base de vos classes à cloner.
Celle-ci implémente la méthode Clone, et parcoure un à un les fields et properties qu'elle contient, et clone le tout.
(Les IEnumerables ne sont pas pris en compte, je pourrais modifier mon code, au besoin)