2010-05-06 43 views
-3

問題是:在此代碼的末尾,ptArray [0] .X的值是3.33還是1.11?更改數組返回的類的值[]運算符

謝謝。

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

你有一個C#編譯器,對不對? – harpo 2010-05-06 15:24:45

+0

我認爲這是某人的功課。 – 2010-05-06 15:32:17

+0

你可能會想,這不是微不足道的,夥計們。想想看。 'first'顯然指向ptArray [0]的內存中的同一個地址,但是當你改變first.X和Y時,你不會改變ptArray [0]。 – abenci 2010-05-06 20:13:31

回答

5

你不改變ptArray[0]本身,因爲這是對的MyPoint實例的引用。但是,您更改它所涉及的對象內的數據。所以如果你這樣做:

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

它確實會打印出3.33。

請注意,如果MyPoint是一個結構而不是類,則此將不爲爲真。雖然具有可變的結構是疼痛的一個整體的其他領域......

0
3.33 

因爲你MyPoint不像標準Point班組長是結構

0

您可以嘗試執行你的代碼,並打印ptArray的輸出[0 ]到控制檯。

試試這個

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

然後你會看到它更改爲3.33,4.44