程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> c#中的ref、out、params參數

c#中的ref、out、params參數

編輯:C#入門知識

c#中的ref、out、params參數


out參數

與c++的引用的對比

out參數可以用來傳遞方法返回值,與c++中的引用有點像,但是還有有些不同:
- 調用方法的時候必須寫out參數
- 調用方法之前必須先分配空間
- 調用方法之前不用先賦值.
- 必須在方法內部對out參數賦值;

下面自己實現一個tryparse函數

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace out參數
{
    class Program
    {
        public struct Mid 
        {
            public int[] _num;
            public string _name;
        }
        static void Main(string[] args)
        {
            //寫一個方法,求一個數組中的最大值、最小值、總和、平均值。
            int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
            //將要返回的四個值,放到一個數組裡返回;但是問題是數組是一組相同類型的數據,所以才能放到一個數組裡面。
            //如果不同類型的話,只能從參數返回了.這時候又可以用結構封裝起來返回;但是這個結構不一定是有意義的,同時是需要做後續操作的.
           // Mid mid = GetMaxMinSumAvg(numbers);
           // Console.WriteLine("名字是{0}",mid._name);
            int max, min, sum;
            double avg;
            GetTest(numbers, out max, out min, out sum,out avg);
            Console.WriteLine("最大值是{0},最小值是{1},總和為{2},平均值為{3}",max,min,sum,avg);
            Console.ReadKey();

        }

        /// 
        /// 計算一個整數數組的最大值,最小值,平均值,總和,平均值;
        /// 
        ///需要計算的那個數組
        ///多余返回的最大值
        ///多余返回的最小值
        ///對於返回的總和
        ///多余返回的平均值
        public static void GetTest(int []nums,out int max,out int min,out int sum,out double avg)
        {
            //必須在方法內部對out參數賦值;
            max = nums[0];
            min = nums[0];
            sum = nums[0];
            for (int i = 1; i < nums.Length; i++)
            {
                if (nums[i]>max)
                {
                    max = nums[i];
                }
                if (nums[i]
        /// 自己實現一個int型的TryParse()函數;
        /// 
        ///
        ///
        /// 
        public static bool MyTryParse(string str,out int num)
        {
            try
            {
                num = int.Parse(str);
            }
            catch (OverflowException)
            {

                num = 0;
                return false;
            }
            return true;
        }
    }
}

ref參數

ref就相當於c++中的引用;比out要更像一點,看它就像是reference的縮寫;

注意三點:
- 在調用方法前一定要賦值;
- 調用時一定要寫ref;
- 一定要構造空間
下面寫一個交換兩個變量內容的操作:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

//ref就相當於c++中的引用;比out要更像一點,out專注返回20年;
namespace ref參數
{
    class Program
    {
        static void Main(string[] args)
        {
            int n1 = 10;
            int n2 = 20;
            //注意兩點;在調用方法前一定要賦值;一定要寫ref;一定要構造空間
            Exchange(ref n1, ref n2);
            Console.WriteLine("交換後,第一個變量是{0},第二個參數是{1}",n1,n2);
            Console.ReadKey();

        }
        /// 
        /// 交換兩個變量
        /// 
        ///第一個變量
        ///第二個變量
        public static void Exchange(ref int n1,ref int n2)
        {
            n1 = n1 - n2;
            n2 = n1 + n2;
            n1 = n2 - n1;
        }
    }
}

params參數

params是可變類型參數,但是它與c++中的變長參數又有不同:
- 將實參列表中跟可變參數數組類型一致的元素都當做數組的元素去處理。
- params可變參數必須是形參列表中的最後一個元素。
- 唯一性:在一個函數裡,只能有一個params可變參數
- 調用時有兩種傳遞方式:數組和直接數據傳;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Params參數
{
    class Program
    {
        static void Main(string[] args)
        {
            int [] a={1,2,3};
            Test("呵呵",a);
        }
        public static void Test(string name,params int[] par)
        {

        }
    }
}

/*
 * param可變參數 可以沒有
 * 唯一性
 * 最後性
 * 兩種傳遞方式
 * 求任意長度數組的最大值;
 * 
 */

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved