以傳值或傳址方式傳遞引數的差別 (Visual Basic)
將一或多個引數傳遞至程序時,每個引數都對應至呼叫程式碼中的相對程式設計項目。 您可傳遞這個對應項目的值或它的參考, 這就是所謂的「傳遞機制」(Passing Mechanism)。
以傳值方式傳遞
在程序定義中指定對應參數的 ByVal (Visual Basic) 關鍵字,即可以「傳值方式」(By Value) 傳遞引數。 使用這個傳遞機制時,Visual Basic 會將對應程式設計項目的值複製到程序中的區域變數, 程序程式碼不會有對應項目的任何存取權。
以傳址方式傳遞
在程序定義中指定對應參數的 ByRef (Visual Basic) 關鍵字,即可以「傳址方式」(By Reference) 傳遞引數。 使用這個傳遞機制時,Visual Basic 會在呼叫程式碼中將對應程式設計項目的直接參考提供給程序。
傳遞機制和項目型別
傳遞機制的選擇與對應項目型別的分類不同, 以傳值或傳址方式傳遞是指 Visual Basic 提供給程序程式碼的內容。 實值型別 (Value Type) 或參考型別 (Reference Type) 指的是如何將程式設計項目儲存在記憶體中。
然而,傳遞機制與項目型別相互關連。 參考型別的值是記憶體中其他位置的資料指標, 這表示以傳值方式傳遞參考型別時,程序程式碼會有對應項目資料的指標,即使它無法存取對應項目本身。 例如,如果項目是陣列變數,則程序程式碼不會有變數本身的存取權,但它可存取陣列成員。
修改的能力
當您將不可修改的項目當做引數傳遞時,無論此項目是以 ByVal 或 ByRef 方式傳遞,程序都不可以在呼叫程式碼中進行修改。
對於可修改的項目而言,下表彙總項目型別和傳遞機制之間的互動:
項目型別 |
透過 ByVal 傳遞 |
透過 ByRef 傳遞 |
---|---|---|
實值型別 (只包含一個值) |
程序無法變更變數或其任何成員 |
程序可以變更變數或成員 |
參考型別 (包含指向類別或結構執行個體的指標) |
程序無法變更變數,但可以變更它所指向的執行個體之成員 |
程序可以變更變數和它所指向的執行個體之成員 |
請參閱
工作
HOW TO:將引數傳遞至程序 (Visual Basic)
HOW TO:變更程序引數的值 (Visual Basic)
HOW TO:防止程序引數的值變更 (Visual Basic)
HOW TO:強制以傳值方式傳遞引數 (Visual Basic)
概念
可修改引數和不可修改引數之間的差異 (Visual Basic)