轉載 C#基礎:ref和out的區別

轉載原出處: http://www.cnblogs.com/gjahead/archive/2008/02/28/1084871.htmlhtml

 

ref和out的區別在C# 中,既能夠經過值也能夠經過引用傳遞參數。經過引用傳遞參數容許函數成員更改參數的值,並保持該更改。若要經過引用傳遞參數, 可以使用ref或out關鍵字。ref和out這兩個關鍵字都可以提供類似的功效,其做用也很像C中的指針變量。它們的區別是:數組

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

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

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

注:在C#中,方法的參數傳遞有四種類型:傳值(by value),傳址(by reference),輸出參數(by output),數組參數(by array)。傳值參數無需額外的修飾符,傳址參數須要修飾符ref,輸出參數須要修飾符out,數組參數須要修飾符params。傳值參數在方法調用過程當中若是改變了參數的值,那麼傳入方法的參數在方法調用完成之後並不所以而改變,而是保留原來傳入時的值。傳址參數偏偏相反,若是方法調用過程改變了參數的值,那麼傳入方法的參數在調用完成之後也隨之改變。實際上從名稱上咱們能夠清楚地看出二者的含義--傳值參數傳遞的是調用參數的一份拷貝,而傳址參數傳遞的是調用參數的內存地址,該參數在方法內外指向的是同一個存儲位置。blog

方法參數上的 ref 方法參數關鍵字使方法引用傳遞到方法的同一個變量。當控制傳遞迴調用方法時,在方法中對參數所作的任何更改都將反映在該變量中。內存

若要使用 ref 參數,必須將參數做爲 ref 參數顯式傳遞到方法。ref 參數的值被傳遞到 ref 參數。cmd

傳遞到 ref 參數的參數必須最早初始化。將此方法與 out 參數相比,後者的參數在傳遞到 out 參數以前沒必要顯式初始化。編譯

屬性不是變量,不能做爲 ref 參數傳遞。變量

若是兩種方法的聲明僅在它們對 ref 的使用方面不一樣,則將出現重載。可是,沒法定義僅在 ref 和 out 方面不一樣的重載。

out

方法參數上的 out 方法參數關鍵字使方法引用傳遞到方法的同一個變量。當控制傳遞迴調用方法時,在方法中對參數所作的任何更改都將反映在該變量中。

當但願方法返回多個值時,聲明 out 方法很是有用。使用 out 參數的方法仍然能夠返回一個值。一個方法能夠有一個以上的 out 參數。

若要使用 out 參數,必須將參數做爲 out 參數顯式傳遞到方法。out 參數的值不會傳遞到 out 參數。

沒必要初始化做爲 out 參數傳遞的變量。然而,必須在方法返回以前爲 out 參數賦值。

屬性不是變量,不能做爲 out 參數傳遞。
網上有不少文章說ref 只傳值,out傳地址等等這種說法,好像不是很是的準確。如下是我作的實例代碼,你們能夠去試試:
 public int  RefValue(int i,ref int j)         {             int k = j;             j =222;             return i+k;         }

              public int OutValue(int i, out int j)         {             j = 222;             return i + j;         }

        private void cmdRef_Click(object sender, EventArgs e)         {             int m = 0;             MessageBox.Show(RefValue(1, ref m).ToString());             MessageBox.Show(m.ToString());         }

        private void cmdOut_Click(object sender, EventArgs e)         {             int m;             MessageBox.Show(OutValue(1, out m).ToString());             MessageBox.Show(m.ToString());         } 借網上總結的一句話說,ref是有進有出,而out是隻出不進。

 

ref和out區別:
1.使用ref的時候必需要先賦值,不然編譯錯誤,而out並不須要。
2.對應的,在實現的方法中,out必須賦值,而ref不強求。

ref 是用來修改傳人蔘數的值的。OUT是用來返回多個返回值的。

相關文章
相關標籤/搜索