黑马程序员技术交流社区

标题: 写方法时 ,参数前加的ref和out [打印本页]

作者: 李紫仪    时间: 2012-2-18 14:40
标题: 写方法时 ,参数前加的ref和out
ref是使形参和实参同指向同一块内存,out也是,但不一样,可不可以理解为out是使它们同指向新开辟的一块内存?
作者: 孙琦    时间: 2012-2-20 23:15
本帖最后由 孙琦 于 2012-2-20 23:15 编辑

ref和out都是引用传参,就是传递的是变量的地址,通过方法题中的修改可以其值,
ref:引用传参,侧重于修改,参数列表前加上ref关键字,注意变量需在传入参数列表前赋值,要不然会报错,
out:引用传参,侧重于输出,在方法的返回之前赋值,修改需要修改的变量,

举个简单的例子:

public static void Main(string[] arg)
        {
            int value = 6; //必须在传入方法之前赋值
            GetNewValue(ref value); //添加关键字ref或者out
            Console.WriteLine(value);
            Console.ReadKey();
        }

        public static void GetNewValue(ref int num)
        {
            num += 6;
        }
不加ref的输出结果为:6
加上ref的输出结果为:12
LZ可以试下用ref/out引用传参的用法.........















作者: 邓坤    时间: 2012-2-21 12:57
关于Ref传值和Out传值的问题,这里我用一个例子来加以说明
static public void addByRef(ref int num)
        {
            num = num + 5;//num可以不先给他赋值,但是.在再调用时参数必须初始化,见下面的调用
        }
static public void addByOut(out int num)
        {
            num = 20;//num必须先给他赋值,再调用的时候参数可以不初始化,见下面的调用
            num = num + 5;
        }
调用上面的两个方法
int i = 10;
addByRef(ref i);//结果15
Console.WriteLine(i.ToString());
int m;
add3ByOut(out m);//结果25
Console.WriteLine(m.ToString());


作者: 祝冰鑫    时间: 2012-2-21 16:18
out往外传的是值,而ref传的是地址
作者: me黄小峰    时间: 2012-2-27 17:59
两个传的都是传引有类型,只是ref必须有初始值后才能做为参加传给方法,
而out是不用初始值的,在方法里面对这个参数赋值的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2