out和ref
成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供象山企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站建設(shè)、網(wǎng)站制作、HTML5、小程序制作等業(yè)務(wù)。10年已為象山眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。
相同點(diǎn):
凡是使用了這兩個(gè)修飾的,都是引用傳遞。
不同點(diǎn):
out 側(cè)重于輸出的參數(shù),也就是調(diào)用方法是為了通過參數(shù)的方式獲得值。通常在方法中,需要返回多個(gè)值的時(shí)候使用。所以,out參數(shù)必須在方法返回(結(jié)束之前)賦值。
*out有種“醉翁之意不在酒”的感覺。調(diào)用使用了含out參數(shù)的函數(shù),目的是為了之后,拿出out修飾的那個(gè)變量,而不在于之前它的初值是什么,即便當(dāng)初賦值了,也無妨。
ref 側(cè)重于修改,調(diào)用方法是為了在方法中修改這個(gè)變量。所以,ref參數(shù)必須在傳入之前就賦值。
*如同每個(gè)月都會(huì)發(fā)工資,然后你有計(jì)劃地消費(fèi)一樣。“工資”相當(dāng)于那個(gè)被ref修飾的變量。
out具體代碼實(shí)現(xiàn):
...
static void Main(string[] args)
{
Console.WriteLine("請(qǐng)輸入你的登錄名");
string name = Console.ReadLine();
string msg;//在這里,賦值也無妨,但是屬于多余。
OutTest(name, out msg);
Console.WriteLine("使用調(diào)用了OutTest函數(shù)后的變量msg,msg的值是" + msg);
Console.ReadKey();
}
static void OutTest(string logainName, out string message)
{
//在這個(gè)函數(shù)中,out修飾的參數(shù),必須被賦值。否則,完成該函數(shù),無法拿出對(duì)應(yīng)的值!
if (logainName == "JamesLiang")
{
message = "登錄成功!";
}
else
{
message = "登錄失敗了";
}
}
ref具體代碼實(shí)現(xiàn):
...
static void Main(string[] args)
{
int salary = 3000;//使用之前,必須賦值!
RefTest1(ref salary);
RefTest2(ref salary);
RefTest3(ref salary);
Console.WriteLine("最終薪水還有" + salary.ToString());
}
static void RefTest1(ref int m)
{
m = m - 100;
Console.WriteLine("調(diào)用RefTest1方法,薪水還有" + m.ToString());
}
static void RefTest2(ref int m)
{
m = m - 200;
Console.WriteLine("調(diào)用RefTest2方法,薪水還有" + m.ToString());
}
static void RefTest3(ref int m)
{
m = m - 300;
Console.WriteLine("調(diào)用RefTest3方法,薪水還有" + m.ToString());
}
本文名稱:out和ref-我的理解
新聞來源:
http://weahome.cn/article/igigpi.html