共用方式為


以傳值或傳址方式傳遞引數的差別

更新:2007 年 11 月

將一或多個引數傳遞至程序時,每個引數都對應至呼叫程式碼中的相對程式設計項目。您可傳遞這個對應項目的值或它的參考,這就是所謂的「傳遞機制」。

以傳值方式傳遞

在程序定義中指定對應參數的 ByVal 關鍵字,即可以「傳值」方式傳遞引數。使用這個傳遞機制時,Visual Basic 會將對應程式設計項目的值複製到程序中的區域變數,程序程式碼不會有對應項目的任何存取權。

以傳址方式傳遞

在程序定義中指定對應參數的 ByRef 關鍵字,即可用「傳址」方式傳遞引數。使用這個傳遞機制時,Visual Basic 會在呼叫程式碼中將對應程式設計項目的直接參考提供給程序。

傳遞機制和項目型別

傳遞機制的選擇與對應項目型別的分類不同,以傳值或傳址方式傳遞是指 Visual Basic 提供給程序程式碼的內容。實值型別 (Value Type) 或參考型別 (Reference Type) 指的是如何將程式設計項目儲存在記憶體中。

然而,傳遞機制與項目型別相互關連。參考型別的值是記憶體中其他位置的資料指標,這表示以傳值方式傳遞參考型別時,程序程式碼會有對應項目資料的指標,即使它無法存取對應項目本身。例如,如果項目是陣列變數,則程序程式碼不會有變數本身的存取權,但它可存取陣列成員。

修改的能力

當您將不可修改的項目當做引數傳遞時,無論此項目是以 ByVal 或 ByRef 方式傳遞,程序都不可以在呼叫程式碼中進行修改。

對於可修改的項目而言,下表彙總項目型別和傳遞機制之間的互動:

項目型別

透過 ByVal 傳遞

透過 ByRef 傳遞

實值型別 (只包含一個值)

程序無法變更變數或其任何成員

程序可以變更變數或成員

參考型別 (包含指向類別或結構執行個體的指標)

程序無法變更變數,但可以變更它所指向的執行個體之成員

程序可以變更變數和它所指向的執行個體之成員

請參閱

工作

HOW TO:將引數傳遞至程序

HOW TO:變更程序引數的值

HOW TO:防止程序引數的值變更

HOW TO:強制以傳值方式傳遞引數

概念

Visual Basic 中的程序

程序參數和引數

以傳值和傳址方式傳遞引數

可修改引數和不可修改引數之間的差異

依位置和名稱傳遞引數

實值型別和參考型別