У меня есть структура и класс
public class MyClass
{
public string name;
}
public struct MyStructure
{
public MyClass classValue;
public int intValue;
public MyStructure(MyClass classValue, int intValue)
{
this.classValue = classValue;
this.intValue = intValue;
}
}
В другом месте я пишу следующий код:
MyClass class1 = new MyClass() { name = "AA" };
MyStructure struct1 = new MyStructure(class1, 4);
MyStructure struct2 = struct1;
struct1.classValue.name = "BB"; //struct2.classValue.name also change!
Как я могу убедиться, что каждый элемент ссылочного типа структуры копируется по значению в таких случаях?
struct
не был хорошим выбором дляmyStructure
. Это корень проблемы. - person Henk Holterman   schedule 22.01.2013struct
для этого? Есть веские причины использоватьstruct
, но ситуации очень специфичны. - person Chris Pfohl   schedule 22.01.2013MyStructure
должен бытьstruct
. Он состоит из одной ссылки на объект и одногоInt32
. Как написано, это изменяемыйstruct
, но это не относится к вопросу. Его можно было бы сделать неизменяемым. Такое же поведение будет найдено дляKeyValuePair<int, MyClass>
, который являетсяstruct
. - person Jeppe Stig Nielsen   schedule 22.01.2013class
? Нет. Кажется, ему нужна глубокая копия, аstruct
не дает ему этого. Класс даже не дает ему неглубокую копию (он просто дает новую ссылку на тот же объект), поэтому на самом деле это не ближе к тому, что он хочет. Похоже, он выбралstruct
, потому что хотел использовать семантику копирования по значению. Это веская причина для выбораstruct
. - person Jeppe Stig Nielsen   schedule 22.01.2013