值类型与引用类型传递的艺术
1. 值类型参数按值传递
2. 引用类型参数按值传递
3. 值类型参数按引用传递
4. 引用类型参数按引用传递
1 class Program 2 { 3 static void Main(string[] args) 4 { 5 //示例1.值类型按值传递,操作的是该值类型实际的一份拷贝 6 int a = 20; 7 Add(a);//传递的是在堆栈上面a的一份拷贝 8 Console.WriteLine(a); 9 10 //示例2.引用类型按值传递,操作的是该引用类型对象的引用地址(但是该引用还是按值传递的),所以会影响改变原来对象 11 Animal Robbit = new Animal(); 12 AddRef(Robbit); 13 //按值传递总结:都是传递的值,值类型传递的是值类型 “值”的拷贝 引用类型:传递的是对象的引用地址 14 15 16 17 18 //示例3.值类型的按引用传递:传递的是其实际值的地址,相对于操作的是值类型在堆栈上面的那块内存 19 int i = 33; 20 ChangeInt(ref i); 21 Console.WriteLine(i.ToString()); 22 //示例4.引用类型按引用传递,传递的是对象引用的引用 23 string str = "WOW"; 24 ChangeRef(ref str); 25 Console.WriteLine(str); 26 Console.ReadKey(); 27 28 //按引用传递总结:是传递参数的地址, 29 30 } 31 32 static void ChangeRef(ref string astr) 33 { 34 astr = "hello word"; 35 } 36 37 static void ChangeInt(ref int i) 38 { 39 i = 22; 40 41 } 42 static void AddRef(Animal robbit) 43 { 44 robbit.eye = 3; 45 Console.WriteLine(robbit.eye); 46 } 47 static void Add(int i) 48 { 49 i = 200; 50 } 51 } 52 53 public class Animal 54 { 55 public int eye = 2; 56 }