让我们再来看有关值传递和引用传递的例子:
//值传递,传递的是这个值的本身 int n = 10; int m = n; m = 40; Console.WriteLine(n); // 10 Console.WriteLine(m); // 40
//引用传递,传递的是对象的引用 //p1 p2 共同指向了同一个堆上的地址 //通过p2改变age,p1所指向的age也会跟着改变的 Person p1 = new Person(); p1.age = 20; Person p2 = p1; p2.age = 25; Console.WriteLine(p1.age); // 25 Console.WriteLine(p2.age); // 25
//字符串虽然属于引用类型,但由于它的不可变性 //在改变s2所指向的内存后,s1所指向的内存不会跟着改变 string s1 = "dssd"; string s2 = s1; s2 = "rere"; Console.WriteLine(s1); // dssd Console.WriteLine(s2); // rere
字符串可以视为一个只读的字符数组,所以不能像int类型数组那样,通过下标来修改数组中元素的值
//在参数前面加上ref修饰,传递的是参数的地址,值传递变成了引用传递 int number = 10; Fun(ref number); Console.WriteLine(number); // 20 public static void Fun(ref int n) { n += 10; }