https://yutuo.net/archives/5e98cb8b74d6363b.htmlhtml
在C#中,我常常用到ref
和out
這兩個關鍵字,但對其區別也還不是很清楚。函數
基本上來講,C#函數參數的傳遞方法爲分兩種,一種轉值,另外一種是傳址。對於不加任何修飾的函數參數來講,它都是傳值的。傳值又分爲兩種,一種是傳對象值,另外一種是傳地址值。對於值類型System.ValueType
(包括這兩種struct
和enum
,C#中的int
、double
等基本類型都是struct
)來講是傳對象值,對於其它對象來講是傳地址值。.net
在加了修飾ref
和out
以後,函數參數就是傳址的。雖然二者都是傳址參數,但二者仍是有區別的,用最簡單的一句說來講:ref
是能進能出,out
是能出不能用。就是說ref
是能夠把值傳入函數裏,而且能夠輸出函數外,因此它主要用於函數內部須要對外部值進行修改的時候;out
不能把值傳入函數,只能作爲輸出,它主要用於函數須要返回多個值的時候。code
要注意的有如下兩點:htm
ref
型參數時,在調用函數前必須初始化(設置過值);使用out
型參數時,必須在函數內對其初始化(設值)。ref
或out
時,函數的定義和調用函數時,參數前都要加ref
或out
關鍵字。