时间:2016-12-21来源:本站原创作者:佚名

1.ref是1个关键字,用来修饰方法的参数.任意的参数都可以使用ref来修饰.

2.如果方法的参数带了ref,那么实参也要带上ref

在执行的时候.当为ref形参传值的时候,为形参赋值不是赋值的实参变量的值,而是实参变量的地址.

所以我们在方法内部修改ref的值其实就是修改的调用者实参变量的值.

3.在为ref形参传递值的时候,必须要给1个变量不能给1个常量,因为ref传递的是变量的地址.

4.啥时候用?

当方法的返回值有多个返回值的时候,我们就可以使用ref来实现.

5.ref修饰的参数不能带默认值.

====================================================================

1.out是1个关键字,用来修饰方法的参数.任意的参数都可以使用out来修饰.

2.如果方法的参数带了out,那么实参也要带上out

在执行的时候.当为out形参传值的时候,为形参赋值不是赋值的实参变量的值,而是实参变量的地址.

所以我们在方法内部修改out的值其实就是修改的调用者实参变量的值.

3.在为out形参传递值的时候,必须要给1个变量不能给1个常量,因为out传递的是变量的地址.

4.因为out要求传递变量的地址,所以out修饰的参数不能带默认值.

out与ref的区别:

a.ref修饰的形参在方法的内部可以给它赋值也可以不赋值.

b.out形参必须在方法结束之前赋值.

c.ref实参在传递之前必须要有值.out实参在传递之前可以没有值.

当out方法执行完毕以后,就算out实参之前没有值,那么在执行完毕以后肯定有值了.

ref侧重于修改,out侧重于输出.

相同点:

无论是ref还是out他们都是传递实参变量的地址,在方法的内部.可以修改ref的值也可以不修改ref的值.out要求在方法的内部必须赋值.

完成以后他们都是修改的实参变量的值

感想:

out,ref传递的不再是栈空间存储的值,而是栈空间的地址

ref必须先赋值在使用,侧重与传入使用

out传递参数在方法内必须对其重新赋值,就意味着就算之前有初始值也没有意义侧重于修改输出

例子:

staticvoidMain(string[]args){//计算一个int类型数组中每个元素的总和以及最大值与最小值int[]arr={24,3,54,6,,75,,,78,09};intsum=0,max,min;GetNum(arr,refsum,outmax,outmin);Console.WriteLine(sum+""+max+""+min);Console.ReadKey();}//out传递参数,在方法内必须对其重新赋值,就意味着就算你之前有初始值也没有意义,侧重于修改输出staticvoidChangeValue(outinta)//references引用--地址--指针{a=;}///summary///计算一个int类型数组中每个元素的总和以及最大值与最小值////summary///returns/returnsstaticintGetNum(int[]arr,refintsum,outintmax,outintmin){max=arr[0];//out参数必须重新赋值min=arr[0];for(inti=0;iarr.Length;i++){sum+=arr[i];if(maxarr[i]){max=arr[i];}if(minarr[i]){min=arr[i];}}returnsum;}









































北京有没有好的白癜风医院
白癜风能治了吗

转载请注明原文网址:http://www.helimiaopu.com/cxfz/3934.html
------分隔线----------------------------