private static void StructVsClass() { // Работа с типами значений Console.WriteLine("VALUE TYPE DEMO:"); var s1a = new StructExample() { A = 1 }; // На стеке! var s1b = new StructExample() { A = 1 }; // На стеке! var s2 = new StructExample() { A = 2 }; // На стеке! Console.WriteLine(s1a.Equals(s1b)); Console.WriteLine(s1a.Equals(s2)); TryChangeStruct(s2); Console.WriteLine(s2.A); Console.WriteLine(); // Работа с ссылочными типами Console.WriteLine("REFERENCE TYPE DEMO:"); var c1a = new ClassExample() { A = 1 }; // В куче! var c1b = new ClassExample() { A = 1 }; // В куче! var c2 = new ClassExample() { A = 2 }; // В куче! Console.WriteLine(c1a.Equals(c1b)); Console.WriteLine(c1a.Equals(c2)); Console.WriteLine(c1a == c1b); Console.WriteLine(c1a == c2); TryChangeClass(c2); Console.WriteLine(c2.A); Console.WriteLine(); }
private static void TryChangeStruct(StructExample s) { s.A = 5; }