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
假設:
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) 代表的不是傳值呼叫的特殊寫法,而是把拆括號的函數結果應用在傳值呼叫。