在方法上面的参数。
如果是值类型的参数,将会进行值传递,实参的值不受形参的值影响。(代码一)
如果是字符串的参数,将会进行值传递,实参的值不受形参的值影响。(代码一)
如果是引用类型的参数,将会进行引用传递,实参的值可被形参影响。(代码一)
但是引用类型的参数在方法体内被重新初始化(赋值)的话,初始化(赋值)后的形参就不再影响实参的值。(代码二)
class="code_img_closed" src="/Upload/Images/2013082618/0015B68B3C38AA5B.gif" alt="" />logs_code_hide('25e0b6bb-4243-42a4-a0d5-a14f654e189d',event)" src="/Upload/Images/2013082618/2B1B950FA3DF188F.gif" alt="" />1 public class A 2 { 3 public int num = 0; 4 public string str = "0"; 5 } 6 7 public class B 8 { 9 public void Change(int num, string str, A obj) 10 { 11 num = 2; 12 str = "2"; 13 14 obj.num = 2; 15 obj.str = "2"; 16 } 17 } 18 19 public class Process 20 { 21 public void Start() 22 { 23 //初始化值类型 num。 24 int num = 1; 25 //初始化字符串类型 str。 26 string str = "1"; 27 //初始化引用类型 obj。 28 A obj = new A(); 29 obj.num = 1; 30 obj.str = "1"; 31 32 //输出:[int: 1][string: 1][A.num: 1][A.str: 1] 33 Console.WriteLine(string.Format("[int: {0}][string: {1}][A.num: {2}][A.str: {3}]", num, str, obj.num.ToString(), obj.str)); 34 35 //初始化操作对象。 36 B b = new B(); 37 b.Change(num, str, obj); 38 39 //输出:[int: 1][string: 1][A.num: 2][A.str: 2] 40 Console.WriteLine(string.Format("[int: {0}][string: {1}][A.num: {2}][A.str: {3}]", num, str, obj.num.ToString(), obj.str)); 41 42 Console.Read(); 43 } 44 }代码一
1 public class A 2 { 3 public int num = 0; 4 public string str = "0"; 5 } 6 7 public class B 8 { 9 public void Change(A a) 10 { 11 a.num = 2; 12 a.str = "2"; 13 } 14 15 public void Change1(A a) 16 { 17 a = new A(); 18 a.num = 3; 19 a.str = "3"; 20 } 21 22 public void Change2(A a, A a2) 23 { 24 a = a2; 25 } 26 } 27 28 public class Process 29 { 30 public void Start() 31 { 32 //初始化对象。 33 A a = new A(); 34 //输出:[int: 0][string: 0] 35 Console.WriteLine(string.Format("[int: {0}][string: {1}]", a.num.ToString(), a.str)); 36 37 //直接改变对象的成员的值。 38 a.num = 1; 39 a.str = "1"; 40 //输出:[int: 1][string: 1] 41 Console.WriteLine(string.Format("[int: {0}][string: {1}]", a.num.ToString(), a.str)); 42 43 //在方法体内改变对象的成员的值。 44 B b = new B(); 45 b.Change(a); 46 //输出:[int: 2][string: 2] 47 Console.WriteLine(string.Format("[int: {0}][string: {1}]", a.num.ToString(), a.str)); 48 49 //在方法体内给对象重新初始化。 50 b.Change1(a); 51 //输出:[int: 2][string: 2] 52 Console.WriteLine(string.Format("[int: {0}][string: {1}]", a.num.ToString(), a.str)); 53 54 //在方法体内给对象重新赋值。 55 A a2 = new A(); 56 a2.num = 4; 57 a2.str = "4"; 58 59 b.Change2(a, a2); 60 //输出:[int: 2][string: 2] 61 Console.WriteLine(string.Format("[int: {0}][string: {1}]", a.num.ToString(), a.str)); 62 63 Console.Read(); 64 } 65 }代码二