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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 朱传波 于 2013-3-17 07:38 编辑

  static void Test()
        {
            string s1 = "Hello,Wrold!";
            Test2(out s1);
        }

        static void Test2(out string str)
        {
            Console.WriteLine(str);//为什么这句话编译不过?
        }

5 个回复

正序浏览
这个问题在黑马的视频中老师有认真的分析过,关于out和ref修饰的参数的异同.ref侧重修改,out则侧重输出,顾名思义,输出,就是你要给个值才能输出,是不是?
建议看看.net初级视频中杨老师的精彩诠释
回复 使用道具 举报
方法的out参数和ref参数
ref 必须先初始化,因为是引用,所以必须先"有",才能引用,而out则是内部为外部赋值,所以不需要初始化,而且初始化也没用。
ref 应用场景内部对外部的值进行改变,out则是内部为外部变量赋值,out一般用在函数有多个返回值的场所。
out :
1) 在方法的参数类型前面加out,那么传参数的时候,也必须在number(定义在Main函数中的变量)前加out表明这个参数不是传入,而是用来传出值的.
2) 如果参数以out形式传入的,那么它在传入前可以不赋初值.
3) 在方法中对于由out修饰的参数,必须赋初值,并且必须在使用前赋值.
out 用于传出值,在方法中必须对out修饰的参数进行赋初值。
ref :
可以理解成是双向的,即可以传入,又可以传出。
在传参数的过程中,如果参数有out或者ref修饰的话,那么改变方法中的参数变量的值,调用者方法中变量的值也会相应改变.
回复 使用道具 举报
你把Test方法里的string s1 = "Hello,Wrold!";弄到Test2中string str= "Hello,Wrold!";  这样改变了方法里的值,s1的指向也改变了
回复 使用道具 举报
out 修饰的参数,在方法结束之前必须对其赋值。

static void Test2(out string str)
        {
            str="";//方法结束前,必须对str赋值
            Console.WriteLine(str);//为什么这句话编译不过?
        }


回复 使用道具 举报
out 的话你肯定要在Test2方法里赋值的,初始化一下,不然str连null都不是,肯定编译通不过
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马