香蕉视频app

Keep on going never give up.

Let's Go

C# 學習筆記(15)方法中利用參數返回值 (ref參數、out參數)

C#Lonely2019-05-03 13:43:3672次0條

通常情況下,方法參數默認是值傳遞的,也就是“復制一份”,傳遞的是變量所對應數據的一個拷貝,而非引用。當方法運行完畢后,這些拷貝將被丟棄,而原來的值不會受到影響。

代碼示例:

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

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            int num = 20;
            int number = Test(num); //(實參)傳num參數,外部去為內部賦值
            Console.WriteLine("num={0},number={1}", num, number); //num為20,number為30            
            Console.ReadKey();
        }
        
        public static int Test(int x) //(形參)x接收num參數(也就是復制num一份)后,x為20
        {
            x += 10; //x為30
            return x;
        }
    }
}

當然還有另外一種情況,我們向方法傳遞參數時使用ref關鍵字和out關鍵字。在傳參數過程中,如果參數有out或ref修飾的話,那么改變方法中的參數變量的值,調用者方法中變量的值也會相應改變。

out 關鍵字:

使參數按引用來傳遞。若要使用 out 參數,方法定義和調用方法都必須顯式使用 out 關鍵字。out參數主要用于傳出值(只出不進),在離開方法前必須對out修飾的參數進行賦值。

代碼示例:

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

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            //out是內部去為外部變量賦值,out一般用在函數需要有多個返回值的場所。
            int num;
            int number = Test(out num); //如果參數是以 out 形式傳入的,那么num在傳入前可以不賦初值。(因為out是只出不進的,所以傳入數據沒有意義);num接收x參數后,num為50。           
            Console.WriteLine("num={0},number={1}", num, number); //輸出num為50,number為100。
            Console.ReadKey();
        }
        
        public static int Test(out int x) //在方法的參數類型前加 out ,那么傳參數的時候也必須在實參前加out,表明這個參數不是用來傳入的,而是用來傳出值的。x給num傳出參數。
        {
            x = 50; //在方法中對于由 out 修飾的參數,必須賦值,并且必須在使用前賦值,因為該參數是用于傳出的。
            int i = 100;
            return i;
        }
       
    }
}

ref 關鍵字:

使參數按引用傳遞。當調用方法時,在方法中會對ref傳入的參數值進行改變。若要使用 ref 參數,則方法定義和調用方法都必須顯式使用 ref 關鍵字。ref參數可以理解成雙向的,既可以傳入,又可以傳出(有進有出)。傳遞到 ref 參數的實參必須先進行初始化。

代碼示例:

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

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {            
            int num = 100; //傳遞到 ref 參數的實參必須先初始化
            int number = Test(ref num); //ref,傳入、傳出值
            Console.WriteLine("num={0},number={1}", num, number);
            Console.ReadKey();
        }
        
        public static int Test(ref int x)
        {
            int i = x;
            x += 100;
            return i;
        }
       
    }
}

out和ref之間的區別

共同點:

香蕉视频appout、ref傳遞的都是參數的引用(內存地址),使用后都將改變原來參數的數值。

不同點:

ref可以把參數的數值傳遞進函數,但是你無法把一個數值從out傳遞進去,out會把參數清空,就是說out進去后,參數的數值為空,所以你必須初始化一次。這個就是兩個的區別,ref是有進有出,out是只出不進。



暗錨,解決錨點偏移

文章評論

    嘿,來試試登錄吧!