C# out、ref、params參數

  1、out參數實例數組

【實例】求一個數組中的最大值、最小值、總和、平均值spa

  class Program
    {
        static void Main(string[] args)
        {
            //寫一個方法 求一個數組中的最大值、最小值、總和、平均值
            int[] nums = { 1, 2, 3, 4, 5, 6 ,7};
            int max;
            int sum;
            int min;
            int avg;
            bool b;
            string s;
            double d;
            GetValue(nums, out max, out min, out sum, out avg,out b,out s,out d);
            Console.WriteLine("數組中的最大值:{0},最小值:{1},總和:{2},平均值:{3}",max ,min,sum,avg);
            Console.WriteLine("輸出out參數的方法不一樣類型的值:{0},{1},{2}",b,s,d);
            Console.ReadKey();
        }
        /// <summary>
        /// 求一個整數的數組的最大值,最小值,總和,平均值
        /// </summary>
        /// <param name="nums">要求值的數組</param>
        /// <param name="max">返回的最大值</param>
        /// <param name="min">返回的最小值</param>
        /// <param name="sum">返回的總和</param>
        /// <param name="avg">返回的平均值</param>
        public static void GetValue(int[] nums, out int max, out int min, out int sum, out int avg, out bool b,out string s,out double d)
        {
           //out參數要求在方法的內部必須爲其賦值
            max = nums[0];
            min = nums[0];
            sum = 0;
            for (int i = 0; i < nums.Length; i++)
            {
                if (nums[i]>max)
                {
                    max = nums[i];
                }
                if (nums[i]<min)
                {
                    min = nums[i];
                }
                sum += nums[i];
            } 
            avg = sum / nums.Length;

            b = true;
            s = "123";
            d = 3.13;
        }
    }

執行代碼輸出結果,如圖所示:blog

總結:string

若是一個方法中,返回多個相同類型的值時候,咱們能夠考慮返回一個數組。可是返回多個不一樣類型的值時候,返回數組就不行,那麼這個時候,咱們能夠考慮用out參數。it

out參數就側重於一個方法能夠返回多個不一樣類型的值。class

 

2、ref參數的實例變量

【實例】使用方法來交換兩個int類型的變量引用

 class Program
    {
        static void Main(string[] args)
        {
            //使用方法來交換兩個int類型的變量
            int n1 = 10;
            int n2 = 20;
            Test(ref n1, ref n2);
            Console.WriteLine("兩個值互相交換後n1爲{0},n2爲:{1}",n1,n2);
            Console.ReadKey();
        }
        public static void  Test(ref int n1,ref int n2)
        {
            int temp = n1;
            n1 = n2;
            n2 = temp;
        }
    }

執行代碼輸出結果,如圖所示:方法

總結:im

ref參數可以將一個變量帶入一個方法中進行改變,改變完成後,再將改變後的值帶出方法。

 ref參數要求在方法外必需要賦值,而方法內能夠不賦值。

 

3、params可變參數

【實例】求任意長度數組的和 整數類型的

 class Program
    {
        static void Main(string[] args)
        {
            //求任意長度數組的和 整數類型的
            int[] nums = { 1, 2, 3, 4, 5, 6 };
            int sum = GetSum(8,9);
            Console.WriteLine(sum);
            Console.ReadKey();
        }
        public static int GetSum(params int[] nums)
        {
            int sum = 0;
            for (int i = 0; i < nums.Length; i++)
            {
                sum += nums[i];
            }
            return sum;
        }
    } 

執行代碼輸出結果,如圖所示:

如圖所示:

 

 總結:

將實參數列表中跟可變參數數組類型一致的元素都當作數組的元素去處理

params可變參數必須是形參列表中的最後一個元素,而且在方法聲明中只容許一個params關鍵字。

 

4、out 與ref的區別

區別:

1.使用ref參數時,傳入的參數必須被初始化,對out而言,必須在方法中對其完成初始化。

2.使用ref參數和out參數時,在方法的參數和執行方法時,都要加ref或者out關鍵字。

3.out參數適合用在須要return多個返回值的地方,而ref參數則用在須要被調用的方法修改調用者的引用的時候。

如圖所示:

out參數

ref參數

ref關鍵字是須要先初始化傳入的參數,纔可以使用。

相關文章
相關標籤/搜索