值传递和引用传递
// 值类型 int double decimal char bool enum struct
// 引用类型 string 数组 自定义类 object 集合 接口
存储上区别:
值类型:存在栈上
引用类型:存在堆上
值传递 例子1
1 // 值传递 2 int n1 = 10; 3 int n2 = n1; 4 n2 = 20; 5 Console.WriteLine(n1); 6 Console.WriteLine(n2); 7 Console.ReadKey();
结果 : n1:10
n2:20
值传递 例子2
1 int number = 10; 2 TestTwo(number); 3 Console.WriteLine(number); 4 Console.ReadKey(); 5 6 public static void TestTwo(int n) 7 { 8 n += 10; 9 }
值传递 例子3
1 int number = 10; 2 TestThree(ref number); 3 Console.WriteLine(number); 4 Console.ReadKey(); 5 6 public static void TestThree(ref int n) 7 { 8 n += 10; 9 }
引用类型例1
1 // 引用传递 2 Person p1 = new Person(); 3 p1.Name = "张三"; 4 Person p2 = p1; 5 p2.Name = "李四"; 6 Console.WriteLine(p1.Name); 7 Console.WriteLine(p2.Name); 8 Console.ReadKey();
结果: 李四, 李四
引用类型例2
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 // 引用传递调用方法 6 Person p = new Person(); 7 p.Name = "张三"; 8 Test(p); 9 Console.WriteLine(p.Name); 10 Console.ReadKey(); 11 } 12 13 public static void Test(Person pp) 14 { 15 Person p = pp; 16 p.Name = "李四"; 17 } 18 }
结果:李四
引用类型例3 特别string
1 string s1 = "张三"; 2 string s2 = s1; 3 s2 = "李四"; 4 Console.WriteLine(s1); 5 Console.WriteLine(s2); 6 Console.ReadKey();
结果:s1: 张三 s2:李四