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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 徐传任 中级黑马   /  2012-10-7 17:48  /  2240 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

        
方法参数上的 out 方法参数关键字使方法引用传递到方法的同一个变量。
当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
当希望方法返回多个值时,声明 out 方法非常有用。
使用 out 参数的方法仍然可以返回一个值。一个方法可以有一个以上的 out 参数。
若要使用 out 参数,必须将参数作为 out 参数显式传递到方法。out 参数的值不会传递到 out 参数。
不必初始化作为 out 参数传递的变量。然而,必须在方法返回之前为 out 参数赋值。
属性不是变量,不能作为 out 参数传递。

评分

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

查看全部评分

5 个回复

倒序浏览
out关键字会导致参数通过引用来传递,ref相类似但是不同在于ref要求变量必须在传递之前进行初始化。
当希望返回多个值时,声明out方法很有用,
两者都是按地址传递的,使用后都将改变原来的值,out使用也能改变数值,所以是按照地址传递的。
ref可以把参数的数值传递进函数,out是要把参数清除,无法把一个数值从out传递进去,out进去后,参数数值为空,要初始化一次。ref是有进有出,out只出不进

评分

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

查看全部评分

回复 使用道具 举报
ref作为参数的函数在调用前,实参必须赋初始值。否则编译器将报错,out作为参数的函数在调用前,实参可以不赋初始值。

评分

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

查看全部评分

回复 使用道具 举报
ref“双向”,out“单向,而且向外传”,ref需要初始化,out初始化可以,不初始化也可以。
下面的代码楼主运行一下,应该可以加深一些理解。
static void Main(string[] args)
        {
            string e="zaoan", f="china";
            outTest(out e,out f);
            Console.WriteLine("{0},{1}",e,f);
            Console.ReadKey();
            refTest(ref e, ref f);
            Console.WriteLine("{0},{1}", e, f);
            Console.ReadKey();

        }
        static void refTest(ref string a, ref string b)
        {
            Console.WriteLine("{0},{1}", a, b);
            Console.ReadKey();
            a = "hello";
            b = "world";
        }
        static void outTest(out string c, out string d)
        {
            c = "nihao";
            d = "beijing";                        
        }

评分

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

查看全部评分

回复 使用道具 举报
赵雅晴 来自手机 中级黑马 2012-10-8 10:09:38
报纸
ref ,out 其实都可以说是引用传递,区别于值传递。
引用传递 的时候 调用函数对参数的修改会反映到原来的传入的参数上,
但值传递则不会改变。传递的只是原来变量的 副本。

ref : 传递前必须初始化,
out:不必初始化,就算初始化,也会被无视,
out 作为输出参数,可以解决函数只有一个返回值的问题

评分

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

查看全部评分

回复 使用道具 举报
  1. 两者都是引用传递,前者要初始值,后者可在方法中赋值
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马