[.NET] 物件類別的ByVal及ByRef問題

看板Visual_Basic作者 (aMa)時間16年前 (2009/12/30 16:24), 編輯推噓3(301)
留言4則, 2人參與, 最新討論串1/1
大家好! 我有個觀念上的問題,有關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
物件類別必須自行實作Clone的功能
12/30 20:28, 1F

12/30 20:32, , 2F
假使System.Array沒有提供Clone方法,也是必須自行實作
12/30 20:32, 2F

12/30 21:22, , 3F
基本上在C#還是VB.NET, CLASS當成參數的傳遞都是ByRef, 除
12/30 21:22, 3F

12/30 21:23, , 4F
非您的類別有實作IClonable介面, 才可以用ByVal
12/30 21:23, 4F
文章代碼(AID): #1BEmux_u (Visual_Basic)