1. 程式人生 > >C#總結---方法的out引數和ref引數

C#總結---方法的out引數和ref引數

我們知道,在c#中,當我們在一個方法中想要訪問另一個方法中的變數的時候,有兩種解決方案---引數和返回值。但當需要返回多個值,並且是不同型別的值的之後應該怎麼辦呢?解決方案可以是

(1)將所有型別資料轉換成字串型別,到最後再都轉換回來,這樣就比較麻煩了

(2)利用方法的out引數和ref引數

下面要跟大家介紹的就是第二個簡單的方法:方法的out和ref引數

在講解方法的out和ref引數之前我們先看看最普通的引數傳遞

static void Main(string[] args)
{
int number1=10;
int number2 = 20;
int sum = AddNumber(number1, number2);

Console.WriteLine(number1); ;
Console.WriteLine(number2);
Console.WriteLine(sum);

Console.ReadKey();
}
public static int AddNumber( int num1, int num2)
{
return num1 + num2;
}

顯而易見,此程式的返回值是10,20,30
方法的out引數(與最簡單的引數傳遞差別已用紅框標出)

 

 

此程式的返回值為10,200,210

概念:out是內部為外部變數賦值,out一般用在函式需要有多個返回值的場所

總結:1.如果方法用引數out修飾了,那麼引數在方法外也要用out修飾

           2. 如果方法的引數用out修飾了,那麼這個引數必須在方法裡進行賦值

           3.當引數在方法外進行賦值時,引數out把方法裡的值傳到了方法外,所以最後引數值為在方法裡賦的值

例題1:

static void Main(string[] args)
{
int number1=10;
int number2=20;
int sum = AddNumber( number1, out number2);

Console.WriteLine(number1); ;
Console.WriteLine(number2);
Console.WriteLine(sum);

Console.ReadKey();
}
public static int AddNumber(int num1, out int num2)
{
num1 = 100;
num2 = 200;
return num1 + num2;
}
此程式的返回值為什麼呢???
開始我理所應當的認為,此程式的返回值為100,200,300,但是大家再仔細看一看,num2沒有用out修飾哦,這可是一個大坑哦!

所以,最後的結果是10,200,210

方法的ref引數(與最簡單的引數傳遞差別已用紅框標出)

 

 

此程式的返回值為10,200,210

很容易可以看出,方法的out和ref只是修改引數,那麼他們最後的返回值是相同的

總結:1.如果方法用引數out修飾了,那麼引數在方法外也要用out修飾

           2.如果方法用引數ref修飾了,那麼引數在方法外必須賦初值

那麼當這種情況呢?

例題2:

static void Main(string[] args)
{
int number1=10;
int number2=20;
int sum = AddNumber( number1, ref number2);

Console.WriteLine(number1); ;
Console.WriteLine(number2);
Console.WriteLine(sum);

Console.ReadKey();
}
public static int AddNumber(int num1, ref int num2)
{
num1 = 100;
num2 = 200;
return num1 + num2;
}

 

 


例題1和例題2,只有num2修飾的差別,例題1用的是out修飾,返回值為10,200,210;
                                                                    例題2用的是ref修飾,返回值為100,200,300;
由此可以看出引數out和ref修飾的差別:

ref可以把值傳到方法裡,也可以把值傳到方法外

out只可以把值傳到方法外
---------------------
作者:Sarah何
來源:CSDN
原文:https://blog.csdn.net/hejingfang123/article/details/78452453
版權宣告:本文為博主原創文章,轉載請附上博文連結!