Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

assignation d'objet , probleme, bug ?

5 réponses
Avatar
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

5 réponses

Avatar
Jérémy Jeanson
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
Avatar
Gerald
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" a écrit dans le message de news:
%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


Avatar
Patrice
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" a écrit dans le message de groupe de
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" a écrit dans le message de news:
%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






Avatar
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
Avatar
Gerald
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" a écrit dans le message de news:

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