Мне казалось, что я понимаю, как переменные значения и типа работают в C#, но я столкнулся со случаем, который мне не ясен и не интуитивно понятен. Если у меня есть экземпляр класса типа «Сборка» (System.Reflection.Assembly) и я назначаю его другой переменной, то он выглядит как «Скопированный», а не по ссылке:
Код: Выделить всё
var assembly2= assembly1;
assembly1= LoadOtherAssembly();
Console.WriteLine(assembly2);
Console.WriteLine(assembly1);
Очевидно, я получаю другую сборку (независимо от того, что дает мне LoadOtherAssembly()) во второй строке (assembly1), но «assembly2», похоже, содержит внутри исходную сборку.Всякий раз, когда я делаю это с любым другим классом, этого не происходит (как и ожидалось):
Код: Выделить всё
public class Person
{
public string Name;
}
var dave=new Person();
dave.Name="Dave";
var culley=dave;
culley.Name="Culley";
Console.WriteLine(dave.Name);
Console.WriteLine(culley.Name);
В этом случае оба выплевывают «Калли», как и ожидалось. Чего мне не хватает и чем это отличается от первого случая с использованием «Сборки»?
Подробнее здесь:
https://stackoverflow.com/questions/789 ... -reference