天天看點

C# List 作為參數傳遞的值變化

可以發現:

經過 Test1後,list 的元素數量由 0 變為 1 了,

經過 Test2後,list 的元素數量還是0。

1.list類型是引用類型

2.引用本身是類似于一個“儲存位址的值變量”

是以從方法外部傳入引用到方法裡,那麼其實引用本身是複制了一份副本來給方法裡使用的,隻是說這個複制的引用副本和之前的引用的内容(也就是所指向的對象記憶體位址)是一樣的,是以通過引用操作對象的資料時,可以看到2個引用都操作的同一個對象;但如果你是修改了引用副本本身的值内容(将該引用指向了一個新的對象的記憶體位址),那麼是不會影響到之前方法外的那個引用的,是以修改後會發現2個引用所指向的對象不同了

而如果對象引用參數前加上了ref,那麼方法參數所傳遞的不再是引用的副本,而是引用的位址了(即通過引用的位址找到引用,再讀出引用裡儲存的記憶體位址值,再根據則個位址值去找到真正要操作的對象),是以如果此時你再修改這個引用的值時,會根據引用的位址找到方法外的那個引用,然後修改其内容,是以會發現方法外的引用也會指向新的對象了

3這裡有三段代碼

你可以看看,體會一下:

(1)

(2)

(3)

參考:

http://www.cftea.com/c/2013/01/5724.asp

http://bbs.csdn.net/topics/390600826