C# 中ref out區別

來源:互聯網
上載者:User

1、使用ref型參數時,傳入的參數必須先被初始化。對out而言,必須在方法中對其完成初始化。

2、使用ref和out時,在方法的參數和執行方法時,都要加Ref或Out關鍵字。以滿足匹配。

3、out適合用在需要retrun多個傳回值的地方,而ref則用在需要被調用的方法修改調用者的引用的時候。

在C#中,方法的參數傳遞有四種類型:傳值(by value),傳址(by reference),輸出參數(by output),數組參數(by array)。

樣本:

代碼

static void Main(string[] args)
{
//outTest
int a, b; //沒賦值
outTest(out a, out b);
Console.WriteLine("Out Test: a={0}, b={1}",a,b); //輸出 a=10,b=20

int c=8,d=9; //賦值
outTest(out c,out d);
Console.WriteLine("Out Test: c={0}, d={1}", c, d);//輸出 c=10,d=20

//RefTest
int o, p;
// refTest(ref o, ref p); 錯誤,Ref 使用前變數必須賦值
o = 1; p = 2;
refTest(ref o,ref p);
Console.WriteLine("Ref Test:o={0},p={1}", o, p); //輸出 o=30,p=40

Console.ReadLine();
}

static void outTest(out int x,out int y)
{
//Console.WriteLine("befor out: x={0},y={1}",x,y); 報錯,使用out後,x,y都被清空,需要重新賦值
x = 10;
y = 20;
}

static void refTest(ref int x,ref int y)
{
Console.WriteLine("befor ref: x={0},y={1}", x, y); //輸出 x=1,y=2
x = 30;
y = 40;
}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.