[.NET] 物件類別的ByVal及ByRef問題
大家好! 我有個觀念上的問題,有關ByVal,ByRef
我的問題以星號標示:
ByVal:呼叫程序的實引數會複製一份給被呼叫的虛引數,因此實引數與虛引數二者
佔用不同記憶體位址,當二者其一被修改時並不會互相影響值。
ByRef:實引數與虛引數佔用相同記憶體位址,因此虛引數一改變,對應的實引數也改變。
☆1.如上的說法,是不是代表ByVal是複製的功能,將內容複製一份給不同變數?
那如果我自已寫一個類別,其中有屬性及方法,
當我將類別new出物件後,以ByVal方式傳給另一程序的虛引數,是不是代表物件的"複製"?
會這樣問,是因為最近我需要將自已寫的類別物件"複製"給其他類別變數,
需內容相同,但彼此獨立,亦即佔用不同記憶體,這意味著是不是可以用ByVal來傳?
另外,在書上說:
如果實引數是陣列的話,不管是寫ByVal,.net都會當ByRef來傳,
因為陣列名稱所存的即是此陣列的起始位址,因此使用整個陣列當引數傳遞即視為參考
呼叫(ByRef)
☆2.那麼類別物件是不是也有這樣的限制,不管是寫ByVal,如同傳遞陣列一樣,
.NET只能以ByRef來傳?
☆3.如果類別物件不能以ByVal來複製,那麼類別物件的複製(深層複製)如何做到?
註:類別物件的複製:類別物件內容相同,但佔用不同記憶體,為個別獨立物件
☆4.如果類別物件可以用ByVal來複製,那麼ByVal的功能是不是等於clone()
☆5.類別物件的複製還有哪些方式可以做到?
再請大家解惑,謝謝!
※ 編輯: aMaa 來自: 140.96.98.77 (12/30 16:28)
推
12/30 20:28, , 1F
12/30 20:28, 1F
推
12/30 20:32, , 2F
12/30 20:32, 2F
推
12/30 21:22, , 3F
12/30 21:22, 3F
→
12/30 21:23, , 4F
12/30 21:23, 4F