2013-07-15 108 views
-1

我有一個類。我有兩個實例成員變量x和y,並且該類還具有一個函數,該函數再次接受兩個名爲x和y的變量。爲什麼實例變量的值按功能值更改

public class MyClass 
{ 
    public int x; 
    public int y; 

    public int Add(int x , int y) 
    { 
     return (x + y); 
    } 
} 

現在我創建一個類的實例,並分配值給實例變量,如果我叫使用相同的實例函數實例變量的值越來越變更爲我傳遞的價值觀作爲函數的參數如下所示

 MyClass abs = new MyClass(); 
     abs.x = 10; 
     abs.y = 11; 
     Console.WriteLine(abs.Add(12, 13).ToString()); 

調試時發現實例變量的值分別變爲12和13。爲什麼這樣?究竟發生了什麼。

+3

再次檢查,我沒有看到它改變。 – haim770

回答

5

我確定實例字段沒有改變。很可能你錯誤​​地解釋了你的調試器輸出。如果您在Add方法中簡單地觀看xy,則調試器(觀察窗口)將顯示方法參數的值。您需要觀看this.xthis.y

這也是我總是用下劃線啓動實例字段的原因之一。

+0

在調試時,如果我將光標放在實例變量上,它會顯示已更改的值 – Vikram

+0

Vikram - 變量顯示相同的名稱,其範圍爲 – Sayse

+1

@Vikram鼠標懸停工具提示不包含任何作用域。它們只顯示當前範圍內具有鼠標光標下的名稱的變量的值,就像監視窗口所做的那樣。 – cremor

3

那麼它不應該改變,以確定最佳的方法是添加這個太

Console.WriteLine(abs.Add(12, 13).ToString()); // output 25 
Console.WriteLine(abs.x + abs.y); // output 21 

來檢查需要使用this.x

詳情Variable names should not match field names

+0

+1鏈接,(國際海事組織這兩個writelines沒有多大幫助,但我可以看到你爲什麼加入他們) – Sayse

1
字段的值

調試器顯示斷點所在範圍的x值。用鼠標指向成員聲明不一定需要顯示該變量的值。在手錶視圖中檢查this.x

相關問題