C# 使用 結構,類別傳遞時, 前者是傳值方式, 後者則為傳址方式
參考一class TheClass { public string willIChange; public TheClass(string data) { willIChange = data; } public string WillIChange { get { return willIChange; } set { willIChange = value;} } } struct TheStruct { public string willIChange; public TheStruct(string data) { willIChange = data; } public string WillIChange { get { return willIChange; } set { willIChange = value;} } }
參考二class TestClassAndStruct { static void ClassTaker(TheClass c) { c.WillIChange = "Changed"; } static void StructTaker(TheStruct s) { s.WillIChange = "Changed"; } static void Main() { TheClass testClass = new TheClass(); TheStruct testStruct = new TheStruct(); testClass.WillIChange = "Not Changed"; testStruct.WillIChange = "Not Changed"; ClassTaker(testClass); StructTaker(testStruct); Console.WriteLine("Class field = {0}", testClass.WillIChange); Console.WriteLine("Struct field = {0}", testStruct.WillIChange); } } /* Output: Class field = Changed Struct field = Not Changed */
class TestClassAndStruct { static void Main() { TheClass classA = new TheClass("Not Changed"); TheClass classB = TheClass classA; //classB 指向 classA 兩者是同一個 classB.willIChange = "Changed"; TheStruct structA = new TheStruct("Not Changed"); TheStruct structB = structA; //複製一份 structA到structB, 兩者各自獨立 structB.willIChange = "Changed"; Console.WriteLine("Class field = {0}", classA.WillIChange); Console.WriteLine("Struct field = {0}", structA.WillIChange); } } /* Output: Class field = Changed Struct field = Not Changed */