黑马程序员技术交流社区
标题:
参数传递ref和out的区别。
[打印本页]
作者:
嘴角上揚ぃ读不
时间:
2014-4-30 22:52
标题:
参数传递ref和out的区别。
本帖最后由 嘴角上揚ぃ读不 于 2014-5-1 19:01 编辑
参数传递ref和out的区别。
作者:
鲤鱼
时间:
2014-4-30 22:58
{:3_46:}你想问啥呢?
作者:
liu0o0y
时间:
2014-5-1 08:14
ref 关键字使参数按引用传递。 其效果是,当控制权传递回调用方法时,在方法中对参数的任何更改都将反映在该变量中。out 关键字会导致参数通过引用来传递。 这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化。 若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字。
使用这两参数的效果:out用于传出参数,传入的参数值是没有意义的,必须传出值,同时在方法中使用由out修饰的参数,使用前要先赋值。ref参数,既可以传入参数的值,也可以传出参数的值。
作者:
亚伦
时间:
2014-5-1 08:39
static void Main(string[] args)
{
#region ref关键字
int a = 1;
int b = 2;
Console.WriteLine("Before AboutRef(): a = {0}, b = {1}", a, b);
AboutRef(ref a, ref b); // 参数列表中的ref关键字是必须的。
Console.WriteLine(" Now: a = {0}, b = {1}", a, b);
#endregion
#region out关键字
int o = 1;
Console.WriteLine("Before AboutOut(): o = {0}", o);
AboutOut(out o); // 参数列表中的out关键字是必须的。
Console.WriteLine(" Now: o = {0}", o);
#endregion
}
static void AboutRef(ref int i1, ref int i2)
{
// 在这里,Test()中的i1和i2相当于a和b的别名,i1和i2的修改对a和b有效
int temp = i1;
i1 = i2;
i2 = temp;
}
static void AboutOut(out int outI)
{
// outI相当于o的别名,outI的修改对o有效。但把他当作是未赋值的变量
//int i1 = outI; // 现在outI相当于一个未赋值的变量,这将产生编译错误。我们知道,不能使用未赋值的变量。
outI = 999; // 必须对变量赋值,你才能使用他
int i2 = outI;
}
复制代码
代码说明一切,有问题请找我讨论。
作者:
亚伦
时间:
2014-5-1 08:42
亚伦 发表于 2014-5-1 08:39
代码说明一切,有问题请找我讨论。
忘了说,在AboutOut()中,我们必须至少对outI赋值一次,否则将产生编译错误。(你可以自己试一下)
作者:
panwenbo1990
时间:
2014-5-1 16:01
我学习C#都是用最形象的方法去理解,这样容易理解而且记得牢。“out”,就是往外传的意思,以为是从一个方法往外传,所以这个变量必须要在方法内部被赋值,不然的话就会出现使用了未赋值的变量的错误。而“ref”,就相当于是使用了一个引用,即传进去再传出来,所以在方法外部,这个变量必须是已经有初始值的,不然的话就会报错:使用了未赋值的变量。
使用out和ref都是传出一个结果,要想得到多个结果可以使用数组变量或者集合
作者:
嘴角上揚ぃ读不
时间:
2014-5-1 19:02
亚伦 发表于 2014-5-1 08:39
代码说明一切,有问题请找我讨论。
谢 谢 啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2