以傳值或傳址方式傳遞引數的差別 (Visual Basic)
當您將一或多個引數傳遞至程序時,每個引數都會對應至呼叫程式碼中的基礎程式設計元素。 您可以傳遞這個基礎元素的值或其參考。 這稱為「傳遞機制」。
以傳值方式傳遞
您可以藉由針對程序定義中的對應參數來指定 ByVal 關鍵字,「依值」傳遞引數。 當您使用此傳遞機制時,Visual Basic 會將基礎程式設計元素的值複製到程序中的區域變數。 程序程式碼沒有呼叫程式碼中基礎元素的任何存取權。
以傳址方式傳遞
您可以藉由指定程序定義中對應參數的 ByRef 關鍵字,「以傳址方式」傳遞引數。 當您使用此傳遞機制時,Visual Basic 會在呼叫程式碼中,為程序提供基礎程式設計元素的直接參考。
傳遞機制與元素類型
傳遞機制的選擇與基礎元素類型的分類不同。 依值傳遞或以傳址方式傳遞,是指 Visual Basic 提供給程序程式碼的內容。 實值型別或參考型別是指程式設計元素如何儲存在記憶體中。
不過,傳遞機制和元素類型是相互關聯的。 參考型別的值是記憶體中其他位置資料的指標。 這表示當您依值傳遞參考型別時,即使無法存取基礎元素本身,程序程式碼也會有基礎元素資料的指標。 例如,如果元素是陣列變數,程序程式碼就沒有變數本身的存取權,但可以存取陣列成員。
修改能力
當您將不可修改的元素作為引數傳遞時,不論程序是傳遞 ByVal
或 ByRef
,程序都不能在呼叫程式碼中修改它。
對於可修改元素,下表摘要說明元素類型與傳遞機制之間的互動。
項目類型 | 已傳遞 ByVal |
已傳遞 ByRef |
---|---|---|
實值型別 (只包含值) | 程序無法變更變數或其任何成員。 | 程序可以變更變數及其成員。 |
參考型別 (包含類別或結構執行個體的指標) | 程序無法變更變數,但可以變更其所涉及執行個體的成員。 | 程序可以變更變數及其所涉及執行個體的成員。 |