assignation d'objet , probleme, bug ?

Le
Gerald
salut à tous, je suis confronté à un probleme que je n'arrive pas à
resoudre.

'''''' creation de ma classe
public class clsObj
public unStr as string
public unInt as integer
end class

'''''' une procedure basique
dim monObj1 as new clsObj
dim monObj2 as new clsObj

monObj1.unInt = 25
monObj1.unStr = "un truc"

monObj2 = monObj1

monObj2.unInt = 55

msgbox (monObj1.unInt) '''''' donne 55, pourquoi ?

''''''''''''''''''''''''''''''
j'ai l'impression que l'assignation n'utilise qu'un seul pointeur, je ne
comprends pas ce qu'il se passe,
merci de m'aider


Gerald
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jérémy Jeanson
Le #18634691
Bonjour Gerald,

En .net, les classes sont des "type référence", je n'ai pas trop le
temps de te faire une explication complète sur la chose maintenant, mais
si tu souhaites de documenter, fait une recherche sur les différence
entre type référence les type valeurs, tu devrais trouver facilement ton
bonheur.
--
Jérémy JEANSON
MCP
http://www.jjeanson.fr
Gerald
Le #18635211
merci,
je n'ai rien trouvé qui me permette de palier à ce probleme.
comment puis-je coder pour instancier un objet 1 - assigner (=) sa valeur a
l'objet 2, modifier l'objet 2 sans modifier l'objet 1

Gerald



"Jérémy Jeanson" %23$
Bonjour Gerald,

En .net, les classes sont des "type référence", je n'ai pas trop le temps
de te faire une explication complète sur la chose maintenant, mais si tu
souhaites de documenter, fait une recherche sur les différence entre type
référence les type valeurs, tu devrais trouver facilement ton bonheur.
--
Jérémy JEANSON
MCP
http://www.jjeanson.fr


Patrice
Le #18636401
En gros un objet n'est ni plus ni moins qu'un pointeur. Donc monObj2=monObj1
veut dire que monObj2 va maintenant pointer vers le même emplacement que
monObj1.

Donc toute modification d'un de ces objets affecte l'autre (car il s'agit
tout simplement de deux variables différentes mais qui représente maintenant
le *même* objet).

Pour faire une copie d'un objet il faut copier ses données et non pas
affecter l'objet lui-même :
monObj2.unInt = monObj1.unInt
monObj2.unStr = monObj1.unStr

Souvent c'est implanté sous forme d'une méthode Clone
monObj2=monObj1.Clone...

--
Patrice


"Gerald" discussion : #
merci,
je n'ai rien trouvé qui me permette de palier à ce probleme.
comment puis-je coder pour instancier un objet 1 - assigner (=) sa valeur
a l'objet 2, modifier l'objet 2 sans modifier l'objet 1

Gerald



"Jérémy Jeanson" %23$
Bonjour Gerald,

En .net, les classes sont des "type référence", je n'ai pas trop le temps
de te faire une explication complète sur la chose maintenant, mais si tu
souhaites de documenter, fait une recherche sur les différence entre type
référence les type valeurs, tu devrais trouver facilement ton bonheur.
--
Jérémy JEANSON
MCP
http://www.jjeanson.fr






Jérémy Jeanson
Le #18641211
Bonjour Gerald et Patrice,

Comme l'a écrit Gerald, on rencontre très souvent des méthode Clone().
Ce n'est pas vriament une norme, mais à force d'en écire et d'en lire on
finirai par y croire.

Dans ton cas tu pourrais écrire une méthode clone pour ta classe sous la
forme :

Public Class clsObj
Public unStr As String
Public unInt As Integer
Public Function Clone() As clsObj
Return New clsObj() With { _
.unInt = Me.unInt, _
.unStr = Me.unStr _
}
End Function
End Class

--
Jérémy JEANSON
MCP
http://www.jjeanson.fr
Gerald
Le #18643791
Merci à vous
Tres interessant le fait de savoir que les classes sont de type reference
J'ai finalement opté pour autre chose,
j'avais ecris une methode qui recupere les valeurs de mon objet dans une BdD
suivant un Id passe en parametre
je vais donc utiliser cette methode qui m'evite d'ecrire une méthode "Clone"
puisque toutes mes classes sont construites sur le meme modele.
en tous cas merci pour ces eclairages



"Jérémy Jeanson"
Bonjour Gerald et Patrice,

Comme l'a écrit Gerald, on rencontre très souvent des méthode Clone(). Ce
n'est pas vriament une norme, mais à force d'en écire et d'en lire on
finirai par y croire.

Dans ton cas tu pourrais écrire une méthode clone pour ta classe sous la
forme :

Public Class clsObj
Public unStr As String
Public unInt As Integer
Public Function Clone() As clsObj
Return New clsObj() With { _
.unInt = Me.unInt, _
.unStr = Me.unStr _
}
End Function
End Class

--
Jérémy JEANSON
MCP
http://www.jjeanson.fr


Publicité
Poster une réponse
Anonyme