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 :
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;
Si à la suite de ce code, j'affiche x.v1, j'aurai 20 comme résultat.
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 :
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;
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é...

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 :

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();
Existe-t-il une méthode à mettre à la place des ... dans affichenomObjet pour laquelle le code ci-dessus permettrait d'afficher :
nom objet courant = x
nom objet courant = y

merci de votre aide !