c#中out ref的简单使用说明

来源:互联网 发布:windows pe 编辑:程序博客网 时间:2024/06/06 05:10

在C#中通过使用方法来获取返回值时,通常只能得到一个返回值。因此,当一个方法需要返回多个值的时候,就需要用到ref和out,那么这两个方法区别在哪儿呢?

MSDN:
       ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。若要使用 ref 参数,则方法定义和调用方法都必须显式使用 ref 关键字。
      out 关键字会导致参数通过引用来传递。这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化。若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字。

案例:

      定义一个方法,求一个整数数组中的最大值,最小值,和,平均数。如果是一个方法只能有一个返回值,那只能每一个都得定义一个方法来实现,不过有了ref和out这实现起来就方便多了。


out:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace out_ref{    class Program    {        static void Main(string[] args)        {            int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };            float avg;//在使用out关键字时,不需要在此处初始化,初始化也不会影响到方法内部的值,所以你初始化没用            int max;            int min;            int sum = GetIntResult(arr, out avg, out max, out min);            Console.WriteLine("和:{0}\t平均值:{1}\t最大值:{2}\t最小值:{3}", sum, avg, max, min);            Console.Read();        }        static int GetIntResult(int[] arry, out float avg, out int max, out int min)        {            int sum = 0;            max = arry[0];            min = arry[0];//使用out关键字时,必须在离开方法前对out关键字修饰的参数初始化            for (int i = 0; i < arry.Length; i++)            {                sum += arry[i];                if (max < arry[i])                {                    max = arry[i];                }                if (min > arry[i])                {                    min = arry[i];                }            }            avg = sum / arry.Length;            return sum;        }    }}


ref:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace out_ref{    class Program    {        static void Main(string[] args)        {            int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };            float avg=0;//在使用ref关键字时,需要在此处初始化,否则程序会报错            int max = arr[0];            int min=arr[0];            int sum = GetIntResult(arr, ref avg, ref max, ref min);            Console.WriteLine("和:{0}\t平均值:{1}\t最大值:{2}\t最小值:{3}", sum, avg, max, min);            Console.Read();        }        static int GetIntResult(int[] arry, ref float avg, ref int max, ref int min)        {            //使用ref在这个地方不需要对max,min进行赋值,因为前面已经初始化过了            int sum = 0;            for (int i = 0; i < arry.Length; i++)            {                sum += arry[i];                if (max < arry[i])                {                    max = arry[i];                }                if (min > arry[i])                {                    min = arry[i];                }            }            avg = sum / arry.Length;            return sum;        }    }}


参考原文:http://www.jb51.net/article/59456.htm#comments


在原文的基础上做了稍微的修改,更加容易区分两者的区别!

0 0
原创粉丝点击