Hello,
je suis en train de me former au C# (notamment par la lecture de l'excellent bouquin C# et .net) et j'aurai 2 petites questions pour lesquelles je n'ai pas trouvé de réponses suffisamment explicites :
1. Copie d'objet :
Si à la suite de ce code, j'affiche x.v1, j'aurai 20 comme résultat.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 public maClasse{ public int v1; } maClasse x, y; x = new maClasse(); x.v1=10; y = x; y.v1 = 20;
Le bouquin stipule que cela est dû au fait que si les références x et y sont 2 espaces mémoires distincts, la partie données est identique et qu'il aurait fallu utiliser new pour créer 2 objets distincts tant au niveau référence que données.
J'ai donc modifié le code de la façon suivante :
Le souci est que même avec un instanciation de y via new, si je modifie le champs v1 de y, celui de x est également modifié...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 maClasse x, y; x = new maClasse(); y = new maClasse(); x.v1=10; y = x; y.v1 = 20;
Est-ce normal ? Quelle erreur ai-je fait ? et si je n'ai pas fait d'erreur, n'est-il pas possible d'initialiser les données d'un objet à partir d'un autre sans introduire cette relation de données partagées de 2 objets à priori distincts ?
Seconde interrogation : existe-t-il une méthode permettant de retourner le nom de la variable objet courante. Illustration :
Existe-t-il une méthode à mettre à la place des ... dans affichenomObjet pour laquelle le code ci-dessus permettrait d'afficher :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 public maClasse{ public void afficheNomObjet(){ console.writeline("nom objet courant = " + ...); } maClasse x, y; x.afficheNomObjet(); y.afficheNomObjet();
nom objet courant = x
nom objet courant = y
merci de votre aide !
Partager