C 傳值關鍵字Ref 與 Out 之比較

2021-05-22 07:22:20 字數 728 閱讀 3948

最近也研究了ref 與out 關鍵字在做方法入參時的區別, 現在寫出來以備:

在c# 中, 我們可以通過值[by value]也可以通過引用[by reference]傳遞引數。通過引用傳遞引數允許函式成員更改引數的值,並保持該更改。若要通過引用傳遞引數, 可使用 ref 或 out 關鍵字。ref和out這兩個關鍵字能夠提供相似的功效,其作用也很像c中的指標變數。它們的區別是:

1. 使用ref和out時,在方法的引數和執行方法時,都要加ref或out關鍵字。以滿足匹配。

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

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

ps:  在c#中,有四種型別來做引數傳遞給方法的:傳值(by value),傳址(by reference),輸出引數(by output),陣列引數(by array)。

其中, 傳值引數無需額外的修飾符,傳址引數需要修飾符ref,輸出引數需要修飾符out,陣列引數需要修飾符params。傳值引數在方法呼叫過程中如果改變了引數的值,那麼傳入方法的引數在方法呼叫完成以後並不因此而改變,而是保留原來傳入時的值。傳址引數恰恰相反,如果方法呼叫過程改變了引數 的值,那麼傳入方法的引數在呼叫完成以後也隨之改變。實際上從名稱上我們可以清楚地看出兩者的含義--傳值引數傳遞的是呼叫引數的乙份拷貝,而傳址引數傳 遞的是呼叫引數的記憶體位址,該引數在方法內外指向的是同乙個儲存位置。

ref 關鍵字out關鍵字

using system using system.collections.generic using system.linq using system.text using system.threading.tasks namespace outandref ref修飾方法的引數,在呼叫的時候必須...

ref關鍵字 out關鍵字 區別

ref 和 out 關鍵字比較怪,他們在方法的引數中使用,今天對他們做了認真的研究 msdn上的定義 ref關鍵字使引數按引用傳遞。其效果是,當控制權傳遞 用方法時,在方法中對引數所做的任何更改都將反映在該變數中。若要使用ref引數,則方法定義和呼叫方法都必須顯式使用ref關鍵字。out關鍵字會導致...

C 基礎之ref與out關鍵字

ref ref 關鍵字使得引數按引用傳遞,通俗點講就是傳遞引數的位址,因此在方法中對引數所做的任何更改都反映在該變數中。值得注意的是傳遞到 ref 引數的引數必須先進行初始化。class refexample static void main 按引用傳遞值型別 如上所示 是有用的,但是 ref 對於...