Passage d'objet en parametre [Résolu]

cs_LordBob 2865 Messages postés samedi 2 novembre 2002Date d'inscription 11 mai 2009 Dernière intervention - 7 nov. 2006 à 14:42 - Dernière réponse : cs_LordBob 2865 Messages postés samedi 2 novembre 2002Date d'inscription 11 mai 2009 Dernière intervention
- 7 nov. 2006 à 19:15
Bonjour a tous,
voila en fait je passe un objet a en paramètre d'un constructeur d'un objet b et normalement si je ne me trompe pas cet objet a devrait etre passé par référence, donc toute modification de cette objet a dans l'objet b entraine une modification de l'objet a dans toutes les classes où il est utilisé.
Ce que je ne comprend pas c'est que cela n'a pas l'air de se passé dans le cas de mon application. Voici des bouts de code pour vous montrer comment je m'y prend:

fichier1.cs: (ici je fait un appel a une classe et je passe un objet en param)
private CDroit droit;
...
frmLogin fLogin = new frmLogin(this.droit);
fLogin.ShowDialog();

fichier2.cs: (ici je modifie l'objet passé en param dans le constructeur)
private CDroit _droit;
...
public frmLogin(CDroit d)
        {
            InitializeComponent();

            // lecture du fichier de configuration
            this.opt = new COption();
            this.opt.loadXML();

            // droit
            this._droit = d; // garde en mémoire la ref de l'objet

            // ajout des logins
            this.ajoutLogin();
        }
...
private bool verifLogin()
        {
            ...
            // definition du droit
            this._droit = new CDroit(droit); // ici je modifie l'objet du param constructeur
            ...
            return (true);
        }

Or l'objet n'est pas modifié n'est pas modifié dans le fichier1. Et je ne comprend pas pourquoi vu que les objets devrait etre passé par reference donc dans le constructeur je ne copie pas un nouvel objet mais je fait pointé un objet vers la reference d'un autre.
Aidez-moi s'il vous pait...
Merci par avance.
Bob...
"Vaut mieux se taire et passer pour un con, que de l'ouvrir et ne laisser aucun doute sur le sujet..."
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 7 nov. 2006 à 15:05
3
Merci
Hello,

this._droit = new CDroit(droit); // ici je modifie l'objet du param constructeur

Avec cette ligne tu fait pointer this._droit sur un  nouvel objet, l'objet que tu as passé en paramètre n'est pas touché, et c'est normal.

par contre, si tu fais this._droit.UnePropriété = UneValeur;
alors, la propriété de l'objet passé en paramètre dans le constructeur sera également affectée, pour autant que tu n'ais jamais fait "this._droit = QuelqueChose" ailleurs que dans le constructeur.

Amicalement, SharpMao

Merci SharpMao 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de SharpMao
Meilleure réponse
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 7 nov. 2006 à 15:23
3
Merci
Hello,

Encore un peu plus d'explications.
Au début, tu fais dans ton fichier1 this.droit = new CDroit();

Ensuite, dans le constructeur de fichier2, tu fait pointer this._droit vers l'objet passé en paramètre

Mais quand tu fais this._droit = new CDroit();, tu ne changes que la référence de fichier2._droit, et pas celle de fichier1.droit :

Voilà, j'espère que c'est un peu plus clair.

Amicalement, SharpMao

Merci SharpMao 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de SharpMao
cs_LordBob 2865 Messages postés samedi 2 novembre 2002Date d'inscription 11 mai 2009 Dernière intervention - 7 nov. 2006 à 15:21
0
Merci
ok exactement, erreur de logique de ma part. je te remercie pour ta réponse.
Merci et bonne continuation a toi.
Bob...
"Vaut mieux se taire et passer pour un con, que de l'ouvrir et ne laisser aucun doute sur le sujet..."
Commenter la réponse de cs_LordBob
cs_LordBob 2865 Messages postés samedi 2 novembre 2002Date d'inscription 11 mai 2009 Dernière intervention - 7 nov. 2006 à 19:15
0
Merci
oui j'avais bien compris. c'est juste que en allant vite, certain détails m'ont échapé. et quand je fesait dans me fichier2 le new Droit();
je pensais instancier en meme temps la classe referencé dans le fichier1.

mais bon c'est en voulant allé trop vite avec un peu de fatigue. mais bon ca ne m'excuse en rien.
sinon je te remercie encore pour ce details d'information et de bien poussé tes explication. merci.
Bob...
"Vaut mieux se taire et passer pour un con, que de l'ouvrir et ne laisser aucun doute sur le sujet..."
Commenter la réponse de cs_LordBob

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.