Référence non-désirée a une classe
Bonjour
Je sais pas trop comment formulé le problème mais allons-y.
En gros, j'ai un petit logiciel dont l'objectif est de trouver la solution optimale a un jeu. J'ai donc une liste de Solutions, qui chacune on des Pions, qui peuvent Bouger() dans la Grille
Je démarre donc la chose avec une Solution principale.
Ensuite;
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
For Each pion As Pion In Solution.Pions
For Each poss As Possibilitee In Jeu.Possibilitees
If pion.PossibiliteeFaisable(Possibilitee, Solution.Grille) Then
Dim subSolution As New Solution(solution)
subSolution.Deplacement(subpion, poss)
If subSolution.Mouvement < Jeu.MouvementMax Then
Resoudre(subSolution)
Else
subSolution.Finaliser()
End If
End If
Next
Next |
Donc je génère une "SubSolution", soit un embranchement dans l'arbre des possibilitées, a partir du mouvement précédent (La fonction Resoudre(solution) appelée plus bas est celle dans laquelle nous sommes, et donc récursive). La SubSolution prend donc la liste des mouvements et la position actuelle des pions de la Solution "maitre" que nous tentons de résoudre en ce moment.
Mon problème c'est qu'avec trace/espion, lorsque je tente d'effectuer un mouvement dans ma SubSolution(.Deplacer()), ma Solution "maître" est aussi affectée. Donc dès que je passe au mouvement suivant tout foire, et il fonce droit dans le mur en quelques millièmes de secondes.
Ce que je ne comprend pas, c'est d'où il tire sa référence, ou pourquoi Solution est affecté par une modification dans SubSolution!?
j'ai pensé au "byref", mais il s'agit bien d'un byval. et j'ai beau chercher, je ne comprend toujours pas pourquoi la seconde ou je modifie quelque chose sur la SubSolution, la Solution est aussi affectée????
Code:
1 2 3 4 5 6 7 8
|
Class Solution
Public sub New(ByVAL solution as Solution)
_pions = solution.Pions
_moves = solutions.Moves
.....
End sub |
Merci
Amuny,