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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李紫仪 黑马帝   /  2012-2-18 14:40  /  2273 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

ref是使形参和实参同指向同一块内存,out也是,但不一样,可不可以理解为out是使它们同指向新开辟的一块内存?

评分

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

查看全部评分

4 个回复

倒序浏览
本帖最后由 孙琦 于 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引用传参的用法.........














评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
关于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());

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
out往外传的是值,而ref传的是地址

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
两个传的都是传引有类型,只是ref必须有初始值后才能做为参加传给方法,
而out是不用初始值的,在方法里面对这个参数赋值的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马