Home Downloads Account Forum Search FAQ Members_List Logout

Tout sur l'informatique - Programmation C#, Sécurité, Divx, P2P
  Inscrivez-vous !  
Fermer ce volet
 Fermer ce bloc
Menu
 Accueil
 Les Sujets et Les Articles
 Informatique
 Programmation C#
 Sécurité & Hacking
 Astuces Windows
 Divx & P2P
 Smartphones
 Cryptographie
 Webmaster
 Cours Delphi Programmation
 Hoax
 MSN
 Divers
 News
 Jeux Video
 Android OS
 Excel
 Communauté
 Forums
 T'Chat IRC
 Downloads et Liens Web
 Téléchargements
 Liens
 Peer To Peer
 Contenu
 Content
 Encyclopedie
 Reviews
 Top 10
 FAQ
 Infos
 Statistiques
 Search

 Fermer ce bloc
Partenaires

Ogame

Angry Birds Solution

Aide Ogame


C# Copier un objet sans implémenter ICloneable  
Programmation C# .NET
Pour cloner un objet en C#, il est recommandé d'implémenter l'interface ICloneable. On peut ensuite appeler la méthode Clone() sur l'objet implémentant la classe ICloneable.

Cependant il n'est pas toujours possible d'implémenter l'interface ICloneable si la classe de l'objet à copier ne nous appartient pas.
La plupart des bibliothèques externes proposent des méthodes Clone quand cela est nécessaire mais ce n'est pas toujours le cas.

Lorsque vous n'avez pas accès à la classe de l'objet à copier, il reste une solution, copier l'objet en utilisant la serialization binaire.
Ce type de clonage fait une copie bit par bit de l'objet cible. Les références pointeront donc vers les mêmes objets que l'objet initial et seuls les types valeurs seront réellement clonés.
Ce type de copie ne peut donc pas être utilisé dans tous les cas et il faut bien comprendre les impacts avant de l'utiliser.

Voici le code d'un serializer permettant d'effectuer une copie binaire d'un objet même s'il ne possède pas de fonction Clone.

Pour l'utiliser, il vous suffit d'appeler ObjectCloner.Clone(objetACopier).

Exemple:
MyClass copie = ObjectCloner.Clone(original);

using System.IO;
using
System.Runtime.Serialization;
using
System.Runtime.Serialization.Formatters.Binary;

public static class ObjectCloner
{
   
/// <summary>
   
/// Perform a deep Copy of the object.
   
/// </summary>
   
/// <typeparam name="T">The type of object being copied.</typeparam>
   
/// <param name="source">The object instance to copy.</param>
   
/// <returns>The copied object.</returns>
   
public static T Clone<T>(T source)
   
{
       
if (!typeof(T).IsSerializable)
       
{
           
throw new ArgumentException("The type must be serializable.", "source");
       
}

       
// Don't serialize a null object, simply return the default for that object
       
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);
       
}
   
}
}    

Posté le Vendredi 28 septembre 2012 à 23:30:09 par zmaster
"C# Copier un objet sans implémenter ICloneable" | Connexion/Créer un compte | 0 commentaires
Les commentaires sont la propriété de leurs auteurs. Nous ne sommes pas responsables de leurs contenus !

Les commentaires anonymes ne sont pas autorisés, veuillez vous enregistrer
 
 Fermer ce bloc Liens connexes
· Plus à propos de Programmation C# .NET
· Nouvelles transmises par zmaster

L'article le plus lu à propos de Programmation C# .NET:
C# Copier un objet sans implémenter ICloneable

 Fermer ce bloc Estimer cet Article
Score Moyen: 3
Votes: 13


Merci de prendre une seconde et de voter pour cet article:

Excellent
Très Bon
Bon
Moyen
Mauvais

 Fermer ce bloc Options

 Format imprimable Format imprimable

 Format PDF Format PDF

 Envoyer cet article à un(e) ami(e) Envoyer cet article à un(e) ami(e)



Conditions d'utilisation

Tous les logos et marques sont des Propriétés respectives. Les commentaires sont la propriété respective de ceux qui les postent, tout le reste © 2006-2011 est personnel.
Tous droits réservés. PHP-MaXiMuS est un logiciel libre en version GNU/GPL license .
Copyright 2005 PHP-MaXiMuS .

[ Page générée en 0.1547 sec ] [ (PHP: 33% - SQL: 67%) ] [ Requêtes SQL: 47 ] [ 361 pages vues la dernière heure ]
 Top Max Cache Off Copyright Mentions légales PHP Maximus CMS