Результат следующего кода меня удивил. Я думаю, что «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' вы вызвать разрыв между аргументом, который был принят, и что вы собираетесь быть изменения с этого момента. Если вы этого не сделали, вы получите '1' в' Main'. – Jon
В C# args передаются по значению не по ссылке, посмотрите ключевое слово [ref] (http://msdn.microsoft.com/en-us/library/14akc2c7.aspx). –
Вы увеличиваете 'число' на' temp' дважды, но вы не работаете над 'a', определенным в' Main'. – Sam