2010-05-06 7 views
-3

La question est la suivante: à la fin de ce code, la valeur de ptArray [0] .X est 3.33 ou 1.11?Modification des valeurs d'une classe renvoyée par l'opérateur array []

Merci.

class MyPoint 
{ 

    public double X, Y; 

    public MyPoint(double x, double y) 
    { 
    X = x; 
    Y = y; 
    } 
} 

MyPoint[] ptArray = new MyPoint[2]; 

ptArray[0] = new MyPoint(1.11, 2.22); 

MyPoint first = ptArray[0]; 

// Am I changing ptArray[0] here or not? 
first.X = 3.33; 
first.Y = 4.44; 
+3

Vous avez un compilateur C#, non? – harpo

+0

Je pense que ce sont les devoirs de quelqu'un. –

+0

Ce n'est pas trivial comme vous pourriez le penser, les gars. Penses-y. 'first' pointe apparemment vers la même adresse dans la mémoire de ptArray [0] mais quand vous changez d'abord.X et Y vous ne changez pas ptArray [0] à la place ... – abenci

Répondre

5

Vous n'êtes pas changer ptArray[0] lui-même, parce que c'est une référence à l'instance de MyPoint. Cependant, vous modifiez les données dans l'objet auquel il fait référence. Donc, si vous faites:

first.X = 3.33; 
Console.WriteLine(ptArray[0].X); 

il imprimera en effet 3.33.

Notez que ce ne serait pas être vrai si MyPoint étaient une structure au lieu d'une classe. Bien qu'ayant struct mutables est un tout autre domaine de la douleur ...

0
3.33 

parce que votre MyPoint est Classs contrairement à la norme Point qui est struct

0

Vous pouvez exécuter votre code et imprimer la sortie de ptArray [0 ] consoler.

Essayez cette

Console.WriteLine(ptArray[0].X + " " + ptArray[0].Y); 

Ensuite, vous verrez qu'il est changé à 3,33, 4,44

Questions connexes