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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 天佑の清清 中级黑马   /  2014-6-26 15:55  /  1849 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 天佑の清清 于 2014-6-26 18:03 编辑

C#中基础视频里out,ref的区别?
感觉这两个平时用的并不多,还是不能很好的理解这两个怎么能更好的记忆和使用?

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

6 个回复

倒序浏览
1.两者都是按地址传递的,使用后都将改变原来的数值。

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
本帖最后由 向晓伟 于 2014-6-26 17:02 编辑
向晓伟 发表于 2014-6-26 16:59
1.两者都是按地址传递的,使用后都将改变原来的数值。

2.ref可以把参数的数值传递进函数,但是out是要把参数清空,无法把一个数值从out传递进去的,out进去后,参数的数值为空,所以你必须初始化一次。
3.曾经的经典回复:ref是有进有出,out是只出不进。
回复 使用道具 举报
本帖最后由 Cacerine 于 2014-6-27 15:50 编辑
  1.     static void Main(string[] args)
  2.         {
  3.             //定义3个变量,并赋值
  4.             int a = 5,b=10,c=20;
  5.             //第一次输出
  6.             Console.WriteLine("{0},{1},{2}", a, b, c);
  7.             int result = fangfa(a, out b, ref c);
  8.             //调用方法后的输出(第3次输出)
  9.             Console.WriteLine("{0},{1},{2}",result,b,c);
  10.             Console.ReadKey();

  11.         }
  12.         static int  fangfa(int canshu1,out int canshu2, ref  int canshu3)
  13.         {
  14.             //这里的canshu2是无法进行输出的,提示:使用了未赋值的out 参数 canshu2
  15.             Console.WriteLine("{0},{1},{2}", canshu1, canshu2, canshu3);
  16.             canshu1 = canshu1 + 1;
  17.             //注意看:canshu2在调用时已经被赋值,只是在参数前面加了out后,canshu2的值被清空了,所以在这里必须重新赋值,然后才能使用
  18.             canshu2 = 10;
  19.             //当屏蔽掉canshu2的重新赋值后,报错(提示:使用了未赋值的out 参数 canshu2)
  20.             canshu2 = canshu2 + 1;
  21.             canshu3 = canshu3 + 1;
  22.             //第二次输出
  23.             Console.WriteLine("{0},{1},{2}", canshu1, canshu2, canshu3);
  24.             return canshu1;
  25.         }
复制代码
我不知道你明不明白我的意思,你把这个程序调一遍,就发现 out  和 ref  的区别在叫做fangfa的函数中,写一个输出,会发现,由out 修饰的 参数下面会有波浪线,提示,未赋值  ,也就是说  ,使用out 修饰的参数无法将调用时的参数值传递到本函数中,而  ref则不存在此问题  
结论:
out  无法传值进函数,但是可以把值传出去给调用者
ref   可以传值进函数 ,并且可以把值传出去给调用者

2.jpg (58.75 KB, 下载次数: 107)

输出结果

输出结果

点评

第一次真正回答问题,也不知道准不准确,希望对lz的理解有帮助!  发表于 2014-6-27 15:51

评分

参与人数 1技术分 +2 收起 理由
czwanglei + 2 很认真,加油

查看全部评分

回复 使用道具 举报
Cacerine 发表于 2014-6-27 15:30
我不知道你明不明白我的意思,你把这个程序调一遍,就发现 out  和 ref  的区别在叫做fangfa的函数中,写一 ...

嗯啊     挺详细的哈
回复 使用道具 举报
天佑の清清 发表于 2014-6-27 17:14
嗯啊     挺详细的哈

对你有帮助就好!
第一次回答问题!
:D
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马