1. ref:
int i =0;
有函數fun(ref i)和fun(i)
它們的函數體都是{ i = 3;},那麽在執行以下兩段代碼後:
(1)int i = 0; fun(i); System.Console.WriteLine(i.ToString());
(2)int i = 0; fun(ref i); System.Console.WriteLine(i.ToString());
(1)的輸出是1,(2)的輸出是3,
2. out:
int i; //註意,這裏只是聲明了變量i,並沒有對其初始化
有函數fun(ref i)、fun(out i)和fun(i)
它們的函數體都是{ i = 3;},那麽在執行以下三段代碼後:
(1)int i = 0; fun(i); System.Console.WriteLine(i.ToString());
(2)int i = 0; fun(ref i); System.Console.WriteLine(i.ToString());
(3)int i = 0; fun(out i); System.Console.WriteLine(i.ToString());
(1)和(2)在編譯的時候都會報錯:錯誤 CS0165: 使用了未賦值的局部變量“i”
而(3)能正常編譯,而且輸出3
對於妳的問題,的確,ref和out跟C/C++中的指針很類似,但是ref和out還是有區別的,主要就是在於ref應用的場合是已經有了壹個變量了,想在另外壹個函數裏頭對其進行修改,這時只能用ref,out的話適用於函數想返回多個值的時候,比如壹個函數做某個運算,結果是壹個int,但是無論函數運行成功或失敗,它都會返回壹個int,但我們在調用的時候還想知道函數的執行是否成功了,這個時候就可以用壹個這樣的函數:int i; bool fun(out i); 通過fun函數返回的bool值可以知道函數執行是否成功,然後通過out的i我們可以知道函數運算得出的結果,因此壹般情況out主要用於壹個函數返回多個返回值的時候。
最後總結壹下:
Ref和Out這兩個關鍵字都能夠提供相似的功效,其作用也很像C中的指針變量。稍有不同之處是:
使用Ref型參數時,傳入的參數必須先被初始化。而Out則不需要,對Out而言,就必須在方法中對其完成初始化。
使用Ref和Out時都必須註意,在方法的參數和執行方法時,都要加Ref或Out關鍵字。以滿足匹配。
Out更適合用在需要Return多個返回值的地方,而Ref則用在需要被調用的方法修改調用者的引用的時候。