黑马程序员技术交流社区
标题:
谁能解释一下这句为什么编译不过?(关于out)
[打印本页]
作者:
朱传波
时间:
2013-3-16 20:45
标题:
谁能解释一下这句为什么编译不过?(关于out)
本帖最后由 朱传波 于 2013-3-17 07:38 编辑
static void Test()
{
string s1 = "Hello,Wrold!";
Test2(out s1);
}
static void Test2(out string str)
{
Console.WriteLine(str);//为什么这句话编译不过?
}
作者:
王起
时间:
2013-3-16 20:56
out 的话你肯定要在Test2方法里赋值的,初始化一下,不然str连null都不是,肯定编译通不过
作者:
曾玉锋
时间:
2013-3-16 20:57
out 修饰的参数,在方法结束之前必须对其赋值。
static void Test2(out string str)
{
str="";//方法结束前,必须对str赋值
Console.WriteLine(str);//为什么这句话编译不过?
}
作者:
王起
时间:
2013-3-16 20:58
你把Test方法里的string s1 = "Hello,Wrold!";弄到Test2中string str= "Hello,Wrold!"; 这样改变了方法里的值,s1的指向也改变了
作者:
王起
时间:
2013-3-16 20:59
方法的out参数和ref参数
ref 必须先初始化,因为是引用,所以必须先"有",才能引用,而out则是内部为外部赋值,所以不需要初始化,而且初始化也没用。
ref 应用场景内部对外部的值进行改变,out则是内部为外部变量赋值,out一般用在函数有多个返回值的场所。
out :
1) 在方法的参数类型前面加out,那么传参数的时候,也必须在number(定义在Main函数中的变量)前加out表明这个参数不是传入,而是用来传出值的.
2) 如果参数以out形式传入的,那么它在传入前可以不赋初值.
3) 在方法中对于由out修饰的参数,必须赋初值,并且必须在使用前赋值.
out 用于传出值,在方法中必须对out修饰的参数进行赋初值。
ref :
可以理解成是双向的,即可以传入,又可以传出。
在传参数的过程中,如果参数有out或者ref修饰的话,那么改变方法中的参数变量的值,调用者方法中变量的值也会相应改变.
作者:
丁涧泉
时间:
2013-3-17 05:37
这个问题在黑马的视频中老师有认真的分析过,关于out和ref修饰的参数的异同.ref侧重修改,out则侧重输出,顾名思义,输出,就是你要给个值才能输出,是不是?
建议看看.net初级视频中杨老师的精彩诠释
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2