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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 嘴角上揚ぃ读不 中级黑马   /  2014-4-30 22:52  /  1618 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 嘴角上揚ぃ读不 于 2014-5-1 19:01 编辑

参数传递ref和out的区别。

6 个回复

正序浏览
亚伦 发表于 2014-5-1 08:39
代码说明一切,有问题请找我讨论。

    谢   谢   啊
回复 使用道具 举报
我学习C#都是用最形象的方法去理解,这样容易理解而且记得牢。“out”,就是往外传的意思,以为是从一个方法往外传,所以这个变量必须要在方法内部被赋值,不然的话就会出现使用了未赋值的变量的错误。而“ref”,就相当于是使用了一个引用,即传进去再传出来,所以在方法外部,这个变量必须是已经有初始值的,不然的话就会报错:使用了未赋值的变量。
使用out和ref都是传出一个结果,要想得到多个结果可以使用数组变量或者集合
回复 使用道具 举报
亚伦 发表于 2014-5-1 08:39
代码说明一切,有问题请找我讨论。

忘了说,在AboutOut()中,我们必须至少对outI赋值一次,否则将产生编译错误。(你可以自己试一下)
回复 使用道具 举报
  1. static void Main(string[] args)
  2.         {
  3.             #region ref关键字
  4.             int a = 1;
  5.             int b = 2;
  6.             Console.WriteLine("Before AboutRef(): a = {0}, b = {1}", a, b);
  7.             AboutRef(ref a, ref b); // 参数列表中的ref关键字是必须的。
  8.             Console.WriteLine("              Now: a = {0}, b = {1}", a, b);
  9.             #endregion

  10.             #region out关键字
  11.             int o = 1;
  12.             Console.WriteLine("Before AboutOut(): o = {0}", o);
  13.             AboutOut(out o); // 参数列表中的out关键字是必须的。
  14.             Console.WriteLine("              Now: o = {0}", o);
  15.             #endregion
  16.         }

  17.         static void AboutRef(ref int i1, ref int i2)
  18.         {
  19.             // 在这里,Test()中的i1和i2相当于a和b的别名,i1和i2的修改对a和b有效
  20.             int temp = i1;
  21.             i1 = i2;
  22.             i2 = temp;
  23.         }

  24.         static void AboutOut(out int outI)
  25.         {
  26.             // outI相当于o的别名,outI的修改对o有效。但把他当作是未赋值的变量
  27.             //int i1 = outI; // 现在outI相当于一个未赋值的变量,这将产生编译错误。我们知道,不能使用未赋值的变量。

  28.             outI = 999;  // 必须对变量赋值,你才能使用他
  29.             int i2 = outI;
  30.         }
复制代码
代码说明一切,有问题请找我讨论。

评分

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

查看全部评分

回复 使用道具 举报
ref 关键字使参数按引用传递。 其效果是,当控制权传递回调用方法时,在方法中对参数的任何更改都将反映在该变量中。out 关键字会导致参数通过引用来传递。 这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化。 若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字。
使用这两参数的效果:out用于传出参数,传入的参数值是没有意义的,必须传出值,同时在方法中使用由out修饰的参数,使用前要先赋值。ref参数,既可以传入参数的值,也可以传出参数的值。
回复 使用道具 举报
{:3_46:}你想问啥呢?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马