.NET中ref和out參數之間的區別

這個問題已經在這裏有了答案: 函數

.NET中的refout參數之間有什麼區別? 在什麼狀況下一個能夠比另外一個更有用? 一個可使用而另外一個不能使用的代碼片斷是什麼? spa


#1樓

參考和輸出參數:

outref參數用於返回做爲方法的參數傳遞的同一變量中的值。 當您的方法須要返回多個值時,這兩個參數很是有用。 code

您必須在calee方法主體中爲out參數分配值,不然該方法將沒法編譯。 對象


參考參數:必須先進行初始化,而後再傳遞給方法。 方法參數上的ref關鍵字使方法引用做爲同一方法的輸入參數傳遞的同一變量。 若是對變量進行任何更改,它們將反映在變量中。 get

int 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參數可用於返回做爲方法的參數傳遞的同一變量中的值。 對參數所作的任何更改都將反映在變量中。 io

int 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; 
}


#2樓

ref可能會阻塞null,由於它可能但願修改現有對象。 out指望爲null,由於它正在返回一個新對象。 class


#3樓

不須要在函數中設置Ref參數,而out參數必須在退出函數以前綁定到一個值。 傳遞出去的變量也能夠不初始化而傳遞給函數。 變量


#4樓

out參數由調用的方法初始化, ref參數在調用方法以前初始化。 所以,僅在須要獲取輔助返回值時使用out參數,而ref參數用於獲取值並有可能返回對該值的更改(其次是返回主返回值)。


#5樓

它們幾乎是相同的-惟一的區別是,您不須要初始化做爲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 )的數據,這些數據已經使用了返回值。

相關文章
相關標籤/搜索