Мой вопрос касается использования объектов в C#. Кажется, я понимаю, что происходит, но я хочу понять, почему. По причинам, в которые я не буду входить, я хочу создать временную копию объекта с его текущими данными (текущее состояние). Поэтому я подумал, что могу создать новый объект, назначить ему оригинальный объект, а затем изменить исходный объект. В этот момент у меня было бы два объекта в разных состояниях. Но происходит то, что скопированный объект выглядит точно так же, как первый. Вот код для иллюстрации:Почему мой объект является указателем?
Order o1 = new Order();
o1.property1 = "test 1";
Order o2 = new Order();
o2 = o1;
o1.property1 = "test 2";
Но в конце этого кода, как O1 и O2 имеют property1 набор «тест-2». Я думаю, что я понимаю, что все объекты являются просто указателями, поэтому, если вы меняете один, он меняет другой, но я не могу понять, почему это так, или почему это полезно. Есть ли какая-то фундаментальная вещь, которую я здесь не хватает? Кроме того, что было бы лучшим способом выполнить то, что я хочу сделать? Что: хранить состояние объекта, вносить изменения, а затем при необходимости восстанавливать. Надеюсь, это имеет смысл.
См. Http://msdn.microsoft.com/en-us/library/t63sy5hs(v=vs.80).aspx для документации, которая объясняет это. – David
вам нужно понять ссылочные типы и типы значений. Классы являются ссылочными типами, когда вы назначаете o1-o2, вы фактически назначаете ссылку на o1, поэтому оба о1 и o2 указывают на одно и то же место в памяти. Так C# работает со ссылочными типами (т.е. классами). –
Спасибо Стэн. Ключом является назначение o2 = o1, просто назначая ссылку на объект, а не значения внутри него. – bardogodspeed