using System; namespace TEST { class Program { static void Main(string[] args) { var structA = new StructA { X = 1 }; ChangeStructA(structA);// struct为值类型 => 值传递 Console.WriteLine(structA.X);// => 1 ChangeStructA(ref structA);// struct引用传递 => 引用传递 Console.WriteLine(structA.X);// => 2 var classA = new ClassA { X = 1 }; ChangeClassA(classA);// class为引用类型 => 引用传递 Console.WriteLine(classA.X);// => 2 var classB = new ClassB { X = 1 }; ChangeClassB(classB); Console.WriteLine(classB.X);// => 2 ChangeClassB(ref classB); Console.WriteLine(classB.X);// => 3 } static void ChangeStructA(StructA a) { a.X = 2; } static void ChangeStructA(ref StructA a) { a.X = 2; } static void ChangeClassA(ClassA a) { a.X = 2; } static void ChangeClassB(ClassB b) { b.X = 2; b = new ClassB { X = 3 };// } static void ChangeClassB(ref ClassB b) { b.X = 2; b = new ClassB { X = 3 };// } } struct StructA { public int X { get; set; } } class ClassA { public int X { get; set; } } class ClassB { public int X { get; set; } } }