Comment cloner des objets en C# ?

C# dispose d'une interface permettant aux objets d'être clonés. Il s'agit de l'interface ICloneable.

Le langage C# fournit une interface permettant aux objets d'être clonés. Il s'agit de l'interface ICloneable. Si l'objet peut être cloné, il doit implémenter l'interface et redéfinir la méthode clone() (lire aussi un autre tutoriel JDN sur C#: Comment créer une feuille Excel en C#). Exemple de classe implémentant l'interface ICloneable :

public class Personne : ICloneable
{
 public string Nom;
 object ICloneable.Clone()
 {
 return this.Clone();
 }
}

Si vous utilisez des objets de frameworks C#, comme les ORM, il est possible que ceux-ci ne puissent pas être clonés à cause d'une session, et il ne faut donc pas essayer de les copier.

Si vous souhaitez créer un copieur universel qui puisse copier une classe, il est possible d'utiliser les méthodes serialize et deserialize(), qui permettent de sauvegarder l'état d'un objet en faisant abstraction du format. Il est facile de transférer les données sérialisées dans un autre objet. Il faut que la classe de l'objet que l'on souhaite cloner implémente l'interface ISerializable. Exemple de copieur d'objets :

public static class ObjectCopier
{
public static T Clone<T>(T source)
{
if (!typeof(T).IsSerializable)
{
throw new ArgumentException(The type must be serializable., source);
}

if (Object.ReferenceEquals(source, null))
{
return default(T);
}

IFormatter formatter = new BinaryFormatter();
Stream stream = new MemoryStream();
using (stream)
{
formatter.Serialize(stream, source);
stream.Seek(0, SeekOrigin.Begin);
return (T)formatter.Deserialize(stream);
}
}
}