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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© LiangLiu 中级黑马   /  2013-4-19 23:05  /  2115 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 LiangLiu 于 2013-4-20 23:51 编辑

out和ref修饰符怎么用,什么时候该用哪个,它们有哪些相似点,有哪些区别?

评分

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

查看全部评分

3 个回复

倒序浏览
1. ref必须先初始化,因为是引用,所以必须先“有”,才能引用;
2. out则是内部为外部赋值,所以不需要初始化,而且外部初始化也没用;
3. ref应用场景内部对外部的值进行改变;
4. out则是内部为外部变量赋值;
5. out一般用在函数有多个返回值的场所。
回复 使用道具 举报
本帖最后由 陈帅 于 2013-4-20 10:24 编辑

额 这个问题,之前有人提过很多次啊,你找找之前的帖子吧~ 都回答挺详细的
回复 使用道具 举报
区别如下:
1.ref是有进有出,而out是只出不进
2.使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化
3.out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。
示例代码如下:
                             public int  RefValue(int i,ref int j)
                                                             {
                                                               int k = j;
                                                               j =222;
                                                               return i+k;
                                                                }
                                               public int OutValue(int i, out int j)
                                                              {
                                                                   j = 222;
                                                                   return i + j;
                                                                }
                                             private void cmdRef_Click(object sender, EventArgs e)
                                                               {
                                                                    int m = 0;
                                                                    MessageBox.Show(RefValue(1, ref m).ToString());
                                                                    MessageBox.Show(m.ToString());
                                                                }
                                                private void cmdOut_Click(object sender, EventArgs e)
                                                                    {
                                                                         int m;
                                                                         MessageBox.Show(OutValue(1, out m).ToString());
                                             MessageBox.Show(m.ToString());
                                                                      }
                                       
           
           
      

     
        
                     

点评

很好,谢谢!  发表于 2013-4-20 23:35

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马