以下代码的输出令我感到惊讶。我认为“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