1. 程式人生 > >方法引數修飾符ref和out的區別

方法引數修飾符ref和out的區別

out和ref

1)out和ref傳變數的地址(引用地址),形參改變,實參也改變。因為他們都是引用一個地址的;
2)帶ref和out修飾的引數只能傳遞變數不能傳遞常量.
3)out和ref的區別
  out修飾的引數必須在方法內修改,而ref可以修改也可以不修改;
  out在傳入引數的時候,引數是區域性變數的話,可以不用賦值,因為out一定會對其進行賦值;
  而ref修飾的引數,在實參必須有初始值才能呼叫。因為ref修飾的不一定會給它賦值。

上程式碼:

 class Program
    {
        static void Main(string[] args)
        {

            int[] zs = { 3, 13, 6, 45, 6, 7, 99, 179 };
            //區別,使用ref修飾的引數,再使用前必須賦初始值;
            int min=0, max;
            //呼叫方法的時候也要加ref和max
            GetMinAndMax(zs,ref min,out max);
            Console.WriteLine("這個陣列中最大的值是{0},最小的值是{1}",max,min);

            Console.ReadKey();
        }
       
        #region out引數求陣列中最大值和最小值
        static void GetMinAndMax(int[] nums, ref int min, out int max)
        {
            //傳入陣列為空,則返回0
            if (nums == null)
            {
                min = 0;
                max = 0;
                return;
            }
            //氣泡排序:面試用, 
            //實際開發:Array.Sort(nums);
            for (int i = 0; i < nums.Length - 1; i++)
            {
                for (int j = 0; j < nums.Length - 1 - i; j++)
                {
                    if (nums[j] > nums[j + 1])
                    {
                        int temp = nums[j];
                        nums[j] = nums[j + 1];
                        nums[j + 1] = temp;
                    }
                }
            }
            //找出兩個數
            min = nums[0];
            max = nums[nums.Length - 1];
        }
        #endregion
    }