1. 程式人生 > >【C#基礎】out、ref、params引數

【C#基礎】out、ref、params引數

1)、out引數。
如果你在一個方法中,返回多個相同型別的值的時候,可以考慮返回一個數組。
但是,如果返回多個不同型別的值的時候,返回陣列就不行了,那麼這個時候,我們可以考慮使用out引數。
out引數要求必須在方法的內部為其賦值,out引數就側重於在一個方法中可以返回多個不同型別的值

class Program
    {
        static void Main(string[] args)
        {
            int[] nums = { 54, 78, 98 };//分數
            int sum;//總成績
            double avg;//平均成績
            bool isFinish;//是否合格
            Test(nums, out sum, out avg, out isFinish);
            Console.WriteLine("小明這次考試的總成績為{0},平均成績為{1},是否合格為{2}", sum, avg.ToString("0.00"), isFinish);
            Console.ReadKey();
        }

        public static void Test(int[] num, out int sum, out double avg, out bool isFinish)
        {
            sum = 0;
            avg = 0;
            isFinish = false;
            for (int i = 0; i < num.Length; i++)
            {
                sum += num[i];
            }
            avg = (double)sum / num.Length;
            if (avg >= 60)
            {
                isFinish = true;
            }
        }
    }

2)、ref引數
能夠將一個變數帶入一個方法中進行改變,改變完成後,再將改變後的值帶出方法。
ref引數要求在方法外必須為其賦值,而方法內可以不賦值

    class Program
    {
        static void Main(string[] args)
        {
            int[] nums = {11,22,66,55,78 };
            ChangeArray(ref nums);//呼叫ChangeArray方法,將陣列nums中每個值都加1
            for (int i = 0; i < nums.Length; i++)
            {
                Console.WriteLine(nums[i]);//輸出nums元素的值,應為{12,23,67,56,79}
            }
            Console.ReadKey();
        }

        public static void ChangeArray(ref int[] num)
        {
            //將陣列num中每個值都加1
            for (int i = 0; i < num.Length; i++)
            {
                num[i] += 1;
            }
        }

    }

3)、params可變引數
將實參列表中跟可變引數陣列型別一致的元素都當做陣列的元素去處理。
params可變引數必須是形參列表中的最後一個元素

   class Program
    {
        static void Main(string[] args)
        {
            int[] num = { 89, 87, 65, 45, 87 };
            //Test("小張", num);  //可以給對應型別的陣列作為引數          
            Test("王二", 78, 89, 48, 58);//可以給對應型別的元素作為引數 
        }

        public static void Test(string name, params int[] num)
        {
            int sum = 0;
            for (int i = 0; i < num.Length; i++)
            {
                sum += num[i];
            }
            Console.WriteLine("{0}這次考試的總成績為{1}",name,sum);
            Console.ReadKey();
        }
    }