以下代碼的輸出令我感到驚訝。我認爲「a」應該引用新創建的對象。有人可以解釋爲什麼結果不是2?c#對象通過引用傳遞或按值傳遞
class Program
{
static void Main(string[] args)
{
aclass a = new aclass();
Process(a);
Console.WriteLine(a.number);
Console.ReadLine();
}
static void Process(aclass a)
{
aclass temp = new aclass();
temp.number++;
//Console.WriteLine(temp.number);
a = temp;
a.number++;
//Console.WriteLine(a.number);
}
}
class aclass
{
public int number = 0;
}
編輯:這是一個面試問題。我剛剛意識到我很長時間以來誤解了這個概念。參數a與原始a不同,儘管它們引用相同的地址。
因爲當你做一個'= temp'你會被傳入的說法,哪些是你將要起便修改之間的脫節。如果你沒有這樣做,你會在'Main'中獲得'1'。 – Jon
在c#中,參數值不是通過引用傳遞的,請查看[ref](http://msdn.microsoft.com/en-us/library/14akc2c7.aspx)關鍵字。 –
你在'temp'上增加了'number'兩次,但是你沒有對'Main'中定義的'a'做任何工作。 – Sam