看板 Visual_Basic 關於我們 聯絡資訊
大家好! 我有個觀念上的問題,有關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)
fumizuki:物件類別必須自行實作Clone的功能 12/30 20:28
fumizuki:假使System.Array沒有提供Clone方法,也是必須自行實作 12/30 20:32
horngsh:基本上在C#還是VB.NET, CLASS當成參數的傳遞都是ByRef, 除 12/30 21:22
horngsh:非您的類別有實作IClonable介面, 才可以用ByVal 12/30 21:23