Probleme de class

Résolu
cs_Guigar Messages postés 105 Date d'inscription mercredi 12 novembre 2008 Statut Membre Dernière intervention 8 juin 2011 - 8 juin 2010 à 13:53
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 - 27 juin 2010 à 17:36
Bonjour a tous

un ptit message pour vous exposer mon probleme et peut etre une solution

soit une class : Cmodele3D

Dans ma frame principale j'ai plusieurs objets de cette classe : par exemple

Public modele1 as Cmodele3D = new Cmodele3D
Public modele2 as Cmodele3D = new Cmodele3D

je souhaite ensuite copier le contenu de modele1 dans modele2
je fais donc

modele2 = modele1 (set n'est plus pris en charge par vb.net)

mais je me suis appercu d'un bug : quand je modifie le contenu dans modele2, modele1 est automatiquement modifié de la meme facon. Pourtant je fais la commande "modele2 = modele1" juste une fois au début de mon programme.

Je ne comprends pas mon probleme

Quelqu'un aurait il une idée ?

Merci d'avance

Guillaume

10 réponses

cs_Guigar Messages postés 105 Date d'inscription mercredi 12 novembre 2008 Statut Membre Dernière intervention 8 juin 2011
8 juin 2010 à 14:27
j'ai trouvé

(j'avais presque la solution)

grosse erreur de ma part, je voulais seulement copier les attributs des class. En faisant

modele2 = modele1 j'en copie aussi les méthode, donc modele2 se retrouve affecté par modele1

en copiant seulement les attributs, j'ai la fonction que je voulais faire

a bientot
3
NHenry Messages postés 15114 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 4 mai 2024 159
8 juin 2010 à 19:47
Bonjour,

Pour rendre l'opération plus transparente pour le code utilisant la classe, tu peux créer une méthode Clone qui te retournera une nouvelle classe avec les mêmes valeurs d'attribut.

Mon site
3
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
8 juin 2010 à 22:29
Salut,

Pour reprendre la solution de NHenry, tu peux utiliser la fonction "MemberwiseClone" de "System.Object" pour créer une fonction clone sans avoir à saisir du code pour chaque membre, Ex :

Public Class MaClass
    '
    Private _Membre1 As String
    Private _Membre2 As Integer
    '
    Public Property Membre1 As String
        Get
            Return _Membre1
        End Get
        Set(ByVal value As String)
            _Membre1 = value
        End Set
    End Property

    Public Property Membre2 As Integer
        Get
            Return _Membre2
        End Get
        Set(ByVal value As Integer)
            _Membre2 = value
        End Set
    End Property


    Public Function Clone() As MaClass
        Return MemberwiseClone()
    End Function

End Class


En suite l'utiliser comme cela :

    Dim Instance1 As New MaClass
    With Instance1
        .Membre1 = "Tata"
        .Membre2 = 89
    End With
    Dim Instance2 As MaClass = Instance1.clone
    With Instance2
        .Membre1 = "Toto"
    End With


Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
3
cs_Guigar Messages postés 105 Date d'inscription mercredi 12 novembre 2008 Statut Membre Dernière intervention 8 juin 2011
8 juin 2010 à 13:56
je souhaite ensuite copier le contenu de modele1 dans modele2
je fais donc

'bien sur ici implicitement je modifie mon objet modele1, sinon aucun interet a copier modele1 dans modele2

modele2 = modele1 (set n'est plus pris en charge par vb.net)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Guigar Messages postés 105 Date d'inscription mercredi 12 novembre 2008 Statut Membre Dernière intervention 8 juin 2011
8 juin 2010 à 14:07
je ne sais pas comment editer les message mais au lieu de lire

"mais je me suis appercu d'un bug : quand je modifie le contenu dans modele2, modele1 est automatiquement modifié de la meme facon. Pourtant je fais la commande "modele2 = modele1" juste une fois au début de mon programme. "

il fallait lire :

"mais je me suis appercu d'un bug : quand je modifie le contenu dans modele1, modele2 est automatiquement modifié de la meme facon. Pourtant je fais la commande "modele2 = modele1" juste une fois au début de mon programme. "
0
NHenry Messages postés 15114 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 4 mai 2024 159
8 juin 2010 à 14:46
Bonjour,

Non, tu ne copie pas les méthodes, mais les références (adresse en mémoire)
Donc quand tu fais :
modele2 = modele1
Et que tu n'a plus de référence sur l'instance qu'il y avait dans modele2, cette dernière est détruite.

Mon site
0
cs_Guigar Messages postés 105 Date d'inscription mercredi 12 novembre 2008 Statut Membre Dernière intervention 8 juin 2011
8 juin 2010 à 14:52
d'accord quelle autre solution j'ai ? A part la solution que j'ai décrite ci dessus (copier uniquement les attributs)

ya til une solution plus rapide ?
0
NHenry Messages postés 15114 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 4 mai 2024 159
8 juin 2010 à 22:54
Bonjour,

Merci Mayzz, je ne connaissait pas :)

Mon site
0
cs_Guigar Messages postés 105 Date d'inscription mercredi 12 novembre 2008 Statut Membre Dernière intervention 8 juin 2011
9 juin 2010 à 08:05
merci a tous de vos réponse !
0
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
27 juin 2010 à 17:36
Sacré Mayzz avec ses clones la fonction qui tue ! et que j'ai toujours pas assimiler

++ mayzz
0
Rejoignez-nous