初级知识点二——C#值传递
C#中有值传递和引用传递,这个东西一直有点儿绕,今天花点儿时间来把这个事情搞清楚。
- 传递值类型的参数
值类型的变量,是直接包含其数据的。实际上,在向方法传递一个值类型变量,其实就意味着向方法传递了一个变量的副本。在方法内部发生的对参数的改版,不影响原变量的值。
1 class PassValue 2 { 3 static void Main () 4 { 5 int Value = 5; 6 int Value2 = Double(Value); 7 System.Consle.WriteLine(Value == Value2); 8 } 9 10 static int Double(int value) 11 { 12 return value*2; 13 } 14 }
在这个例子中,最终的结果为false,Value = 5,值未被改变。
通过引用传递值类型:
如果使用 ref 关键字来传递值参数,其余的与上面案例都相同,那么最终的运行结果为true。因为此时已经将Value的引用传递了过去,实际上Double(int value)方法操作的就是Value本身。
总结:
1. 值传递,传递的并不是以前的实体,而只是实体的一个副本,在方法中修改传入的值,并不会影响之前的值实体。
2. 引用传递,比如利用ref、out关键字传递,这样传递的其实是实体在堆中的地址,指向了传递的实体,因此方法操作时,会改变原先的实体对象。