Итак, сегодня я обнаружил, что структуры и классы действуют по-разному, когда используются для присваивания переменных в C #. Насколько я понимаю, когда я присваиваю структуру переменной, переменная хранит копию этой структуры, и когда я назначить класс переменной, переменная хранит ссылку на этот экземпляр класса.
В этом случае dad2 содержит копию dad1, поэтому не должно ли что-либо, что я сделать с dad2, не повлиять на dad1? Очевидно, это не тот случай, потому что когда я добавляю сына в dad2, он также добавляет того же сына в dad1.
public struct Dad {
public string name;
public List <Son> sons;
public struct Son {
public string name;
public Son (string n) {
name = n;
}
}
}
static void Main (string [] args) {
Dad dad1 = new Dad ();
dad1.name = "Bob";
dad1.sons = new List <Dad.Son> {new Dad.Son ("A")};
Dad dad2 = dad1;
Debug.WriteLine (dad2.Equals (dad1) + " " + dad1.sons.Count () + " " + dad2.sons.Count ());
//true 1 1
dad2.sons.Add ( new Dad.Son ("B"));
Debug.WriteLine (dad2.Equals (dad1) + " " + dad1.sons.Count () + " " + dad2.sons.Count ());
//true 2 2
}