C 基本語法 ref與out

2021-08-20 17:58:00 字數 988 閱讀 4588

與c++相同,c#的函式在傳遞引數時也會遇到形參與實參的問題,一般情況下制定返回值為函式要輸出的結果,所有形參為函式的輸入,但這樣做有兩個缺點:

(1) 返回值只能有乙個,因此無法實現輸出多個結果

(2) 通常程式設計需要將返回值設為狀態值,例如返回該函式是否呼叫成功(如com元件技術中的hresult),此時最好將輸出設為函式的引數,保持程式設計的規範

為了解決這兩個缺點,c#與c++一樣,也有引用的概念,ref關鍵字可使傳遞的形參與實參繫結起來,使用方法與c++有一些區別,即在呼叫函式和函式形參列表中都加入ref關鍵字,表示該引數的形參與實參指向同乙個變數,若改變將一起改變。

ref方法能夠很好地解決引數輸出問題,但ref函式必須傳入乙個已初始化的值,即在函式呼叫時即使為空也好,該引數必須初始化,而一些函式呼叫過程該引數的初始化與建立可能需要在函式內進行,out關鍵字則可以很好地解決這個問題。

out關鍵字的用法和效果與ref一模一樣,唯一的區別便是out關鍵字對應的引數可以傳入未初始化的值,且函式中該引數也表示未初始化,因此out關鍵字在使用時需要注意乙個細節,若傳入的引數未初始化,則函式中不能直接使用該引數,會報錯。示例**如下:

using system;

namespace refandout

static void refadd(int a, int b, ref int c)

static void outadd(int a, int b, out int c)

static void main(string args)

}輸出結果:

formal para: 1+2=0

ref para: 1+2=3

out para with initialization: 1+2=3

out para without initialization: 1+2=3

另外注意:若函式引數為list型別,則函式對該list中的元素進行操作,實際引數也會發生改變,若想關聯list型別變數無需設定ref和out引數

c 中ref與out區別

ref 和 out 都是c 中的關鍵字,所實現的功能也差不多,都是指定乙個引數按照引用傳遞。對於編譯後的程式而言,它們之間沒有任何區別,也就是說他們只有語法區別。有如下語法區別 1.ref 傳進去的引數必須在呼叫前初始化,out不必,即 int i somemethod ref i 語法錯誤 som...

C 中out與ref區別

一 ref 參考 與out區別 1 out 只出不進 將方法中的引數傳遞出去,在方法中將該引數傳遞出去之前需要在該方法起始賦初值 在方法外傳遞的該引數可以不用賦值 簡單理解就是 將乙個東西丟擲去之前必須對此東西進行修改,否則就不用丟擲去,修改時的動作必須發生在方法的起始。2 ref 有進有出 在方法...

c 中ref與out的區別

一般情況下是乙個方法返回乙個值,當需要乙個方法返回多個值的時候就要用到ref out.他們基本沒什麼區別,就是一些語法區別。1.ref傳進去的引數必須在呼叫前初始化,out不用。int i somemethod ref i 語法錯誤 somemethod out i 正確2.ref傳進去的引數可以直...