ref和out的区别在c#中?

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/05 06:21:15

ref和out的区别在c#中?

还是以例子来说明吧;
1. ref:
int i =0;
有函数fun(ref i)和fun(i)
它们的函数体都是{ i = 3;},那么在执行以下两段代码后:
(1)int i = 0; fun(i); System.Console.WriteLine(i.ToString());
(2)int i = 0; fun(ref i); System.Console.WriteLine(i.ToString());
(1)的输出是1,(2)的输出是3,
2. out:
int i; //注意,这里只是声明了变量i,并没有对其初始化
有函数fun(ref i)、fun(out i)和fun(i)
它们的函数体都是{ i = 3;},那么在执行以下三段代码后:
(1)int i = 0; fun(i); System.Console.WriteLine(i.ToString());
(2)int i = 0; fun(ref i); System.Console.WriteLine(i.ToString());
(3)int i = 0; fun(out i); System.Console.WriteLine(i.ToString());
(1)和(2)在编译的时候都会报错:错误 CS0165: 使用了未赋值的局部变量“i”
而(3)能正常编译,而且输出3
最后总结一下:
Ref和Out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量.稍有不同之处是:
使用Ref型参数时,传入的参数必须先被初始化.而Out则不需要,对Out而言,就必须在方法中对其完成初始化.
使用Ref和Out时都必须注意,在方法的参数和执行方法时,都要加Ref或Out关键字.以满足匹配.
Out更适合用在需要Return多个返回值的地方,而Ref则用在需要被调用的方法修改调用者的引用的时候.