IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

copie d' objets


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 69
    Points : 30
    Points
    30
    Par défaut copie d' objets
    Petite question, j'ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    MonObject o1 = new MonObject ();
    MonObject o2 = o1; //o1 et o2 pointe sur le meme objet
     
    MonObject o3= new MonObject ();
    Comment faire pour que o1 et o2 pointent sur le meme objet que o3 sans utiliser o1.
    Je m'explique : je veux faire comme si je ne connaissait pas la variable o1 (par contre je connais o2 et je sais que o2 pointe sur le meme objet que o1 et je sais aussi que o1, o2, o3 référence un même type d'objet).

    Je pense à un truc du genre :
    -copy physique de la mémoire contenue à l'adresse référencée par o3 à l'adresse référencée par o2
    -o3 = o2

    Comment faire ce que je veux?

  2. #2
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    Hum... Ce n'est pas trop clair...

    Que veux tu ? avoir trois pointeurs sur les même données ? ou copier des données à trois endroits différents ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 69
    Points : 30
    Points
    30
    Par défaut
    Je veux avoir les 3 pointeurs sur la même donnée (sur l'objet pointés par o3) mais sans "utiliser" o1.

    Donc je ne peux pas faire
    o2 = o3;
    o1 = o3; //je ne veux pas utiliser o1

  4. #4
    Rédacteur

    Inscrit en
    Juin 2004
    Messages
    744
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Juin 2004
    Messages : 744
    Points : 1 352
    Points
    1 352
    Par défaut
    Ta classe MonObjet doit implémenter l'interface ICloneable et implémenter la méthode Clone

    Dans cette méthode tu dois créer un nouvel objet du meme type, le remplir et le retourner.

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Points : 1 561
    Points
    1 561
    Par défaut
    avec un constructeur de copie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    o1 = new valeur();
    o2 = o1;
    o3 = new valeur(o2);
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	public class valeur 
    	{
    		public valeur () { v = 0; }
    		public valeur (valeur obj) { v = v.obj; }
    		// ...
    	}
    après ca... o2 pointe sur o1 et o3 pointe sur un objet séparé avec le meme contenu que o1, ou alors j'ai rien compris à la question

  6. #6
    Membre éclairé
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Points : 777
    Points
    777
    Par défaut
    Citation Envoyé par LefortLudovic
    Ta classe MonObjet doit implémenter l'interface ICloneable et implémenter la méthode Clone

    Dans cette méthode tu dois créer un nouvelle objet du meme type, le remplir et le retourner.
    Il ne veux pas savoir comment copier un object en ayant une référence différente. Ce quil veux c'est avoir une copie de référence.

    Il veut faire ceci
    02 = 01 : ici o2 pointe sur le meme object que o1
    02 = 03 : ici o2 pointe sur o3 mais il veux aussi que o1 suivent en pointant vers o3 sans spécifier o1 = o3.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 69
    Points : 30
    Points
    30
    Par défaut
    Il veut faire ceci
    02 = 01 : ici o2 pointe sur le meme object que o1
    02 = 03 : ici o2 pointe sur o3 mais il veux aussi que o1 suivent en pointant vers o3 sans spécifier o1 = o3.
    exactement...

    PS : comment faire pour citer quelqu'un et qu'il y ai écrit X à écrit...

  8. #8
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    Il y a le mode unsafe :

    (citation d'un autre topic [Mehdi tn])
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    unsafe
                {
                    int x = 10;
                    int* y = &x;
     
                    System.Console.WriteLine(*y);
                }
    Sinon tu encapsule..

    Quelque chose du genre :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    MonConteneur
    {
        Object donnee;
        getter/setter
     
        MonConteneur(Object donnee){...}
    }

    Et tu ulise ca ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Object o1 = ...;
    MonConteneur c1 = new MonConteneur(o1);
    MonConteneur c2 = new MonConteneur(c1.getDonnee());
    MonConteneur c3 = new MonConteneur(c2.getDonnee());

    Mais ma question est : Quel est l'intérêt, l'objectif, de faire ceci ?

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 69
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par hed62
    Mais ma question est : Quel est l'intérêt, l'objectif, de faire ceci ?
    L'intêret est de pouvoir remplacer un objet par un autre.

    Imaginons un objet référencé par un nombre n de variables. Parmis ces n variables, j'en connais une ( donc j'ai access à cet objet ). Je veux maitenant (pour une raison x) que ces n variables référencent toutes un autre objet du meme type (mais toujours le même pour ces n variables).

    Je pense que tes solutions ne font pas vraiment ce que je veux...

    Je vais faire en dessin ce que je veux :

    initialement j'ai n variable référencant oldObject et une variable (ref) référencent newObject (du meme type que oldObject)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
                 mémoire
     
    o1------->oldObject
               ^    ^
    o2---------|    |
     .              |
     .              |
    oN---------------
     
     
     
    ref------>newObject
    Je veux que o1..oN référencent newObject
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
                 mémoire
     
    o1--------------|
     .              |
     .              |
    o2-----------|  |
    o1--------|  |  |
              |  |  |      
              |  |  |
              v  v  v
    ref------>newObject
    une manière simple de faire ca est
    o1=ref;
    ...
    oN=ref;
    Mais je ne peux pas faire ca car je ne connais pas toutes les variables oX (en faite je ne connnasi que o1). Je ne peut peut donc pas déplacer les pointerus o2..oN vers l'adresse de newObject.

    Il faudrait donc que je puisse faire l'inverse : copier physiquement newObjet à l'adresse pointée par o1...voila une idée de comment faire mais je ne sais pas comment la mettre en pratique, si d'autre personne voient d'autres facon de faier, je suis preneur

    PS : dsl pour l"état des dessins...si quelqu'un sait comment ajouter une image de son DD ?
    Images attachées Images attachées  

  10. #10
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Il veut faire ceci
    02 = 01 : ici o2 pointe sur le meme object que o1
    02 = 03 : ici o2 pointe sur o3 mais il veux aussi que o1 suivent en pointant vers o3 sans spécifier o1 = o3.
    Je dirais que c'est impossible.



    Il y a le mode unsafe :

    (citation d'un autre topic [Mehdi tn])

    Code :
    unsafe
    {
    int x = 10;
    int* y = &x;

    System.Console.WriteLine(*y);
    }

    Sinon tu encapsule..

    Quelque chose du genre :




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    MonConteneur
    {
        Object donnee;
        getter/setter
     
        MonConteneur(Object donnee){...}
    }
    Et tu ulise ca ainsi :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Object o1 = ...;
    MonConteneur c1 = new MonConteneur(o1);
    MonConteneur c2 = new MonConteneur(c1.getDonnee());
    MonConteneur c3 = new MonConteneur(c2.getDonnee());
    Mais ma question est : Quel est l'intérêt, l'objectif, de faire ceci ?
    Je ne pense pas que cette solution réponde à ses attentes.

  11. #11
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    J'ai une solution :
    Tu fait pointer tes n variables vers un pointeur unique et ce pointeur tu le fait pointer sur ton objet.
    Ainsi en connaissant o1 tu peut accéder à ce pointeur uniquement que tu fais pointer vers le nouvelle objet et ainsi tous tes pointeurs pointes sur ce nouvel objet.

    Je ne vois pas autrement.

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 69
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par ced600
    Tu fait pointer tes n variables vers un pointeur unique et ce pointeur tu le fait pointer sur ton objet.
    Humm, ca m'a l'air plutot pas mal ca!

Discussions similaires

  1. Probleme copie d'objet dans un tableau
    Par ché dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 13/12/2006, 12h15
  2. [FLASH 8] Copy d'objets
    Par bibile dans le forum Flash
    Réponses: 3
    Dernier message: 13/09/2006, 17h18
  3. Méthode de classe et copie d'objets
    Par Duloup dans le forum Général Python
    Réponses: 5
    Dernier message: 11/04/2005, 16h27
  4. [VB6] Copie d'objet
    Par preverse dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 23/08/2004, 10h04
  5. [VB6] Copie d'objets
    Par austin49 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 19/05/2003, 18h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo