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 |