這個問題已經在這裏有了答案: 函數
.NET中的ref
和out
參數之間有什麼區別? 在什麼狀況下一個能夠比另外一個更有用? 一個可使用而另外一個不能使用的代碼片斷是什麼? spa
out
和ref
參數用於返回做爲方法的參數傳遞的同一變量中的值。 當您的方法須要返回多個值時,這兩個參數很是有用。 code
您必須在calee方法主體中爲out參數分配值,不然該方法將沒法編譯。 對象
參考參數:必須先進行初始化,而後再傳遞給方法。 方法參數上的
ref
關鍵字使方法引用做爲同一方法的輸入參數傳遞的同一變量。 若是對變量進行任何更改,它們將反映在變量中。 getint sampleData = 0; sampleMethod(ref sampleData);
參考參數的Ex it
public static void Main() { int i = 3; // Variable need to be initialized sampleMethod(ref i ); } public static void sampleMethod(ref int sampleData) { sampleData++; }
輸出參數:在傳遞給方法以前沒必要初始化。
out
參數可用於返回做爲方法的參數傳遞的同一變量中的值。 對參數所作的任何更改都將反映在變量中。 ioint sampleData; sampleMethod(out sampleData);
Ex的Out參數 編譯
public static void Main() { int i, j; // Variable need not be initialized sampleMethod(out i, out j); } public static int sampleMethod(out int sampleData1, out int sampleData2) { sampleData1 = 10; sampleData2 = 20; return 0; }
ref可能會阻塞null,由於它可能但願修改現有對象。 out指望爲null,由於它正在返回一個新對象。 class
不須要在函數中設置Ref參數,而out參數必須在退出函數以前綁定到一個值。 傳遞出去的變量也能夠不初始化而傳遞給函數。 變量
out
參數由調用的方法初始化, ref
參數在調用方法以前初始化。 所以,僅在須要獲取輔助返回值時使用out
參數,而ref
參數用於獲取值並有可能返回對該值的更改(其次是返回主返回值)。
它們幾乎是相同的-惟一的區別是,您不須要初始化做爲out
參數傳遞的變量,但必須將其做爲ref
參數傳遞給它。
int x; Foo(out x); // OK int y; Foo(ref y); // Error: y should be initialized before calling the method
Ref
參數用於可能被修改的數據, out
參數用於該函數的附加輸出(例如int.TryParse
)的數據,這些數據已經使用了返回值。