免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
返回列表 回復 發帖

Function的參數是ByRef,變數名稱加上括弧後卻結果錯誤!!??

我有以下程式,兩種寫法,但變數(Rt1)一個有改變,另一個沒改變。為什麼呢?

Module Module1    Sub Main()
Dim Rt1 As UInt16        '寫法一        Rt1 =
0        Console.WriteLine("Ret={0}, Var={1}", F1(Rt1), Rt1)
'得到 Ret=1234, Var=1234
'寫法二        Rt1 =
0        Console.WriteLine("Ret={0}, Var={1}", F1((Rt1)), Rt1)
'得到 Ret=1234, Var=0
' (Rt1) 和 Rt1 有何不同處?
End
Sub
Private
Function F1(ByRef Act As UInt16)
As UInt16        Act =
1234
Return Act    End
Function
End
Module






你好,這是VB裡的一個特性,加一個括號的話,是"強用ByVal',詳情可以參考下面的連結。
How to: Force an Argument to Be Passed by Value (Visual Basic)
http://msdn.microsoft.com/en-us/library/chy4288y.aspx




假設:
Rt1 存在 位置 A
(Rt1) 會傳回新的位置 B
(Rt1 + 0) 傳回新的位置 C
所以
F1(Rt1) 參照位置 A
F1((Rt1)) 參照位置 B
F1((Rt1 + 0)) 參照位置 C
位置 B, C 無變數指定,存取完即拋棄,因此 F1((Rt1)) 不會改變位置 A 的 Rt1 ,改變的是位置 B 的 (Rt1) 。
(Rt1) 代表的不是傳值呼叫的特殊寫法,而是把拆括號的函數結果應用在傳值呼叫。
返回列表