question de base sur la copie d'objet + nom d'un objet
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:
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:
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:
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 !