C#中有两种参数传递的方式,值传递和引用传递,他们之间有什么区别呢
1、按值传递引用类型:参数的默认传递方式,按值传递引用类型时,我们传递给方法的是一个对象的引用值,通过这个引用值我们可以修改源对象的状态,也就是字段于属性的值,但不可以改变这个引用所指向的对象
2、按引用传递引用类型,也就是我们使用ref关键字来传递参数,这时候我们不仅可以修改源对象的状态,还可以改变这个引用所指向的对象- class Person
- {
- public string name;
- public int age;
- public Person ( )
- {
- }
- public Person(string name,int age)
- {
- this.name=name;
- this.age=age;
- }
- static void Main ( string[] args )
- {
- Person p1 = new Person ( "lily", 15 );
- setPerson ( p1 );
- Console.WriteLine ( "{0},{1}", p1.name, p1.age );
- setPerson ( ref p1 );
- Console.WriteLine ( "{0},{1}", p1.name, p1.age );
- Console.ReadKey ( );
- }
- public static void setPerson (Person p ) //按值传递
- {
- p.age = 10;
- p = new Person ( "tom", 20 );
- }
- public static void setPerson ( ref Person p )//按引用传递
- {
- p.age = 10;
- p = new Person ( "tom", 20 );
- }
- }
复制代码 对于上面这个例子,当我们执行setPerson ( p1 )方法时,传递的是p1的引用值,所以代码中的p.age=10会成功修改我们传入的p1对象的年龄,但是下面的p = new Person ( "tom", 20 )代码会没有效果,因为我们不能将另外的对象引用赋值给P。
当执行setPerson ( ref p1 )时,我们实际上是直接在p1上进行操作,所以,p.age = 10;p = new Person ( "tom", 20 );两句代码都会得到正确的执行。
所以Main()方法的执行结果应该是
lily,10
tom,20
|