Ваш выбор повторного использования имен переменных может сбить с толку проблему.Давайте исправим это:
MyData foo = new MyData();
foo.Num = 1;
MyData bar = new MyData();
bar.Num = 2;
Console.WriteLine(foo.Num); // num = 1
Test(bar, foo);
Console.WriteLine(foo.Num); // num still equals 1
public static void Test(MyData src, MyData dest)
{
// dest.Num = 1 here
dest = src;
// dest.Num = 2 now
}
Теперь давайте посмотрим, что делает Test
. переназначает значение от dest
до src
.Он НЕ изменяет значения объекта, на которые ссылаются либо dest
, либо src
.Так что foo
и bar
в вызывающей функции все еще ссылаются на одни и те же объекты, поэтому ваш результат ожидается.
Если вы сделали dest
a ref
переменную в Test
, тогда вы бы увидели foo
изменение, потому что Test
изменит фактическую ссылку.