菜鸟笔记——ref和out参数(参数传递)_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 菜鸟笔记——ref和out参数(参数传递)

菜鸟笔记——ref和out参数(参数传递)

 2015/3/24 21:38:08  倒霉的肖恩  程序员俱乐部  我要评论(0)
  • 摘要:1.引入问题实例:写一个方法,计算int数组中的每个元素的总和以及最大值与最小值*其目的是返回3个值类型的变量,那么问题来了,但是方法return只能返回一个值,这时就可以用ref和out来修饰参数示例代码(没有修饰):1staticvoidMain(string[]args)2{345int[]arr={56,31,2,89,76};6intsum=0,max=0,min=0;7GetValue(arr,sum,max,min);89Console.WriteLine("总和:"+sum+"
  • 标签:笔记

1.引入问题

实例:写一个方法,计算int数组中的每个元素的总和以及最大值最小值
    * 其目的是返回3个值类型的变量, 那么问题来了,但是方法return只能返回一个值 ,这时就可以用ref和out来修饰参数

示例代码(没有修饰):

class="code_img_closed" src="/Upload/Images/2015032421/0015B68B3C38AA5B.gif" alt="" />logs_code_hide('6acb094f-a5c6-425c-8e2e-fcb0b1291c58',event)" src="/Upload/Images/2015032421/2B1B950FA3DF188F.gif" alt="" />
 1     static void Main(string[] args)
 2         {
 3          
 4 
 5             int[] arr = { 56,31,2,89,76};
 6             int  sum = 0, max = 0, min = 0;
 7             GetValue(arr, sum,  max,  min);
 8 
 9             Console.WriteLine("总和:" + sum + ",最大值:" + max + ",最小值:" + min);
10         }
11 
12         public static void GetValue(int [] arr , int sum,  int max,  int min)
13         {
14              sum = 0;
15              max = arr[0];
16              min = arr[0];
17 
18             for(int i = 0; i < arr.Length; i++)
19             {
20                 sum += arr[i];
21                 if(max<arr[i])
22                 {
23                     max = arr[i];
24                 }
25                 if(min>arr[i])
26                 {
27                     min = arr[i];
28                 }
29 
30             }
31           
32         }
View Code

 

示例代码(修饰后):

 1    static void Main(string[] args)
 2         {
 3          
 4 
 5             int[] arr = { 56,31,2,89,76};
 6             int  sum = 0, max = 0, min = 0;
 7             GetValue(arr,ref sum, ref max, ref min);
 8 
 9             Console.WriteLine("总和:" + sum + ",最大值:" + max + ",最小值:" + min);
10         }
11 
12         public static void GetValue(int [] arr , ref int sum, ref int max, ref int min)
13         {
14              sum = 0;
15              max = arr[0];
16              min = arr[0];
17 
18             for(int i = 0; i < arr.Length; i++)
19             {
20                 sum += arr[i];
21                 if(max<arr[i])
22                 {
23                     max = arr[i];
24                 }
25                 if(min>arr[i])
26                 {
27                     min = arr[i];
28                 }
29 
30             }
31           
32         }
View Code

结果证实: 没有用ref和out传递的值类型参数,将传递的是栈内存里的值内容
         * 用ref和out修饰后,值类型传递将传递栈内存的地址,也就导致了形参和实参(实参给形参赋值),只向一个地址,
         * 形参通过方法改变后,实参变量的值页将会改变

 

2.ref=references---引用

 * 注意:1.传参的参数必须在方法调用之前前声明并赋值(先赋值在使用)
            2.传参实参要加ref,方法声明的形参也要加ref,“门当户对”。
            3.ref传递的参数其实没有真正的创建一个新的变量,是将实参和形参共享一个地址的内存

 

3.out=输出参数

  * 注意:1.传参的参数可以只声明不赋值,但是在调用的方法体内,必须为其赋值(在方法体内必须赋值)
             2.传参实参要加out,方法声明的形参也要加out,“门当户对”。
             3.out传递的参数其实没有真正的创建一个新的变量,是将实参和形参共享一个地址的内存

 

  
4.ref和out的区别

          ref传递的参数必须赋值在使用(在外赋值)
                           out可以只声明不赋值,但是在方法体内必须赋值(在内赋值)

 

 5.基础概念:

    1.参数传递,默认都是传递栈空间的内容
           2.如果添加了ref或out修饰,那么将会传递栈空间的地址,不再是栈空间的内容
           传递过程:形参是实参的一种规范,形参也是一个独立的变量,将会把实参赋该形参     
    
        

 

发表评论
用户名: 匿名