Bonjour tout le monde,
J'ai un petite soucis avec la creation d'une collection de classe et plus precisement, en manipulant. Imaginons que je creer la classe myclass avec comme module de classe et que j'initialise sa valeur + fonction pour ajouter une valuer a cette derniere:
Code :
- Private value as integer
- Public Sub Add(ByRef addvalue as integer)
- value = value + addvalue
- End Sub
- Private Sub Class_Initialize()
- value = 100
- End Sub
|
Ensuite, j'ai mon joli programme main :
Code :
- Public Sub main()
- Dim defaultclass as myclass
- Dim coll as Collection
- ' Initialization
- Set class = New myclass
- Set coll = New Collection
- ' Modify data
- Call defaultclass.Add(20) ' Histoire d'avoir une valeur differente de la valeur d'init
- ' Feed the collection
- coll = feedmycoll(defaultclass)
- End Sub
|
Et ensuite ma belle fonction feedmycoll (dans le meme module) :
Code :
- Private Function feedmycoll(ByRef defaultclass as myclass) as Collection
- Dim tmpClass as myclass
- Dim i as integer
- ' Initialization
- Set tmpClass = New myclass
- Set feedmycoll = New Collection
- ' Loop
- For i = 1 to 100
- ' Reset
- Set tmpClass = New defaultclass
- Set tmpClass = defaultclass
- ' Add
- Call tmpClass.Add(i)
- feedmycoll.Add tmpClass
- Next i
- End Function
|
Et la, c'est le drame .... La collection va etre remplie avec 100 objets de class myclass ayant la meme value qui sera 220.
Je ne comprends pas pourquoi cela fait cela et j'aimerais pouvoir trouver un moyen de cheater la dessus.
Mon exemple est totalement pipo mais le cadre dans mon probleme est integre a un pogramme largement plus complexe. Cependant le probleme est la :
le fait de faire un Set tmpClass = defaultclass puis un Call tmpClass.Add(i) va aussi modifier la valeur de l'objet defaultclass . De meme, si au lieu de faire un Set tmpClass = defaultclass je fais un tmpClass.value = defaultclass.value, meme probleme.
Le seul moyen moche que j'ai trouve, c'est de creer une variable, par exemple defaultvalueclass, de dire au debut defaultvalueclass= defaultclass.value et ensuite a chaque boucle d'ecrire tmpClass.value = defaultvalueclass.
Il n'y a pas d'autres moyens ?
Message édité par Profil supprimé le 08-03-2011 à 13:05:03