扫盲:byval和byref
你知道传递参数byval和byref的区别吗?byval的就一定不变吗?如果你不确定,请看代码,猜猜output是什么?
imports Microsoft.VisualBasic
imports System
imports System.Collections


public Class TestClassclass TestClass
public a as integer
end class


public Module MyModulemodule MyModule

Sub Main()sub Main
dim a as integer
a = 5
TestValByVal(a)
dim b as new TestClass
b.a = 5
TestRefByVal(b)
dim c as new TestClass
c.a = 5
TestRefByVal(c)
WL(a)
wl(b.a)
wl(c.a)
RL()
end sub

public Sub TestValByVal()sub TestValByVal(byval a as integer)
a = 10
end sub


public Sub TestRefByVal()sub TestRefByVal(byval b as TestClass)
b.a = 10
b= new TestClass
b.a = 15
end sub

public Sub TestRefByRef()sub TestRefByRef(byref b as TestClass)
b.a = 10
b= new TestClass
b.a = 15
end sub

Helper methods#region "Helper methods"


Sub WL()sub WL(text as object)
Console.WriteLine(text)
end sub


Sub WL()sub WL(text as object, paramarray args as object())
Console.WriteLine(text.ToString(), args)
end sub

Sub RL()sub RL()
Console.ReadLine()
end sub

Sub Break()sub Break()
System.Diagnostics.Debugger.Break()
end sub

#end region

end module
imports Microsoft.VisualBasic
imports System
imports System.Collections

public Class TestClassclass TestClass
public a as integer
end class

public Module MyModulemodule MyModule
Sub Main()sub Main
dim a as integer
a = 5
TestValByVal(a)
dim b as new TestClass
b.a = 5
TestRefByVal(b)
dim c as new TestClass
c.a = 5
TestRefByVal(c)
WL(a)
wl(b.a)
wl(c.a)
RL()
end sub

public Sub TestValByVal()sub TestValByVal(byval a as integer)
a = 10
end sub

public Sub TestRefByVal()sub TestRefByVal(byval b as TestClass)
b.a = 10
b= new TestClass
b.a = 15
end sub

public Sub TestRefByRef()sub TestRefByRef(byref b as TestClass)
b.a = 10
b= new TestClass
b.a = 15
end sub

Helper methods#region "Helper methods"

Sub WL()sub WL(text as object)
Console.WriteLine(text)
end sub

Sub WL()sub WL(text as object, paramarray args as object())
Console.WriteLine(text.ToString(), args)
end sub

Sub RL()sub RL()
Console.ReadLine()
end sub

Sub Break()sub Break()
System.Diagnostics.Debugger.Break()
end sub
#end region
end module