A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马刘俊 中级黑马   /  2013-1-23 13:46  /  1176 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

C#中有两种参数传递的方式,值传递和引用传递,他们之间有什么区别呢

1、按值传递引用类型:参数的默认传递方式,按值传递引用类型时,我们传递给方法的是一个对象的引用值,通过这个引用值我们可以修改源对象的状态,也就是字段于属性的值,但不可以改变这个引用所指向的对象

2、按引用传递引用类型,也就是我们使用ref关键字来传递参数,这时候我们不仅可以修改源对象的状态,还可以改变这个引用所指向的对象
  1. class Person
  2. {
  3. public string name;
  4. public int age;
  5. public Person ( )
  6. {
  7. }
  8. public Person(string name,int age)
  9. {
  10. this.name=name;
  11. this.age=age;
  12. }
  13. static void Main ( string[] args )
  14. {
  15. Person p1 = new Person ( "lily", 15 );
  16. setPerson ( p1 );
  17. Console.WriteLine ( "{0},{1}", p1.name, p1.age );

  18. setPerson ( ref p1 );
  19. Console.WriteLine ( "{0},{1}", p1.name, p1.age );
  20. Console.ReadKey ( );

  21. }
  22. public static void setPerson (Person p )  //按值传递
  23. {
  24. p.age = 10;
  25. p = new Person ( "tom", 20 );
  26. }
  27. public static void setPerson ( ref Person p )//按引用传递
  28. {
  29. p.age = 10;
  30. p = new Person ( "tom", 20 );
  31. }

  32. }
复制代码
对于上面这个例子,当我们执行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



评分

参与人数 1技术分 +1 收起 理由
潘梦军 + 1

查看全部评分

3 个回复

倒序浏览
值得学习ing!
回复 使用道具 举报
值类型就是现金,要用直接用;引用类型是银行卡,平时看到的就是一串号码。要用还得先去银行取现
回复 使用道具 举报
建议楼主可以补充一下out的使用~~   ref和out比较使用,此贴会更加全。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马