C#之方法引數的按值傳遞和按引用傳遞

傳遞物件是值型別,按值傳遞後傳遞進方法的是值的副本,方法外部物件不受影響。

按引用傳遞傳遞進方法的是物件的地址,外部物件會受影響。

如果傳遞物件是引用型別,無論是普通傳遞還是加上ref或者out,都會更改外部的物件。

如果傳遞物件是字串,則類似值型別,要傳遞引用,必須加ref關鍵字。

out、ref、params

1)、out引數。

如果你在一個方法中,返回多個相同型別的值的時候,可以考慮返回一個數組。

但是,如果返回多個不同型別的值的時候,返回陣列就不行了,那麼這個時候,我們可以考慮使用out引數。

out引數就側重於在一個方法中可以返回多個不同型別的值。

out引數在使用之前必須在方法內部為out引數賦值

out引數無法獲取傳遞進來的變數的值,只能為傳遞進來的變數賦值,所以在傳進來之前即使賦值了也沒意義

out引數在方法執行完畢之前必須賦值

2)、ref引數

能夠將一個變數帶入一個方法中進行改變,改變完成後,再將改變後的值帶出方法。值傳遞改變為引用傳遞

ref引數要求在方法外必須為其賦值,而方法內可以不賦值。

3)、params可變引數

將實參列表中跟可變引數陣列型別一致的元素都當做陣列的元素去處理。

params可變引數必須是形參列表中的最後一個引數。

可變引數可以傳遞引數也可以不傳遞引數,如果不傳遞引數,則陣列為一個長度為0的陣列。不是null。

可變引數可以直接傳遞一個數組進來