Q1---------------------------------------------------
VB中的数组名称后面,在什么场合需要加括号,什么场合不需要,各自表示什么含义,好象语言参考中不是很明确,偶非常头痛。例如:Dim a1(2) As Integer
Dim a2 As Varianta1(0)=1
a1(1)=2
a1(2)=3假设我想用a1给a2赋值,可以写:
a2=a1()
能否写:
a2=a1 ?
这两个表达式有何不同?什么情况下需要加括号,什么情况下不需要?Q2----------------------------------------------------
另外,同一个数组能否包含不同的类型呢?
例如:
Dim a(3) As Varianta(0)=1
a(1)="abc"
set a(2)=oObject 'oObject是一对象
a(3)=trueQ3---------------------------------------------------
ByVal和ByRef参数传递,如果ByVal应该问题不大,不过VB中如果参数是数组,则好象必须用ByRef
我有个问题,就是如果异步操作,例如:在模块1中,
intA=12345 'intA属于模块1
通过callSUB(ByRef intA)这样的子程序,假设没有进行运算,直接赋值intB=intA 'intB属于模块2然后卸载模块1,执行模块2上的要用到intB的程序。 会不会有什么问题?intA的销毁是否只是销毁了其中一个指向数据存放位置的指针?还是intA的销毁要销毁数据本身?
数据是什么时候被VB撤消的?是否所有的变量都不再引用这个数据才撤消?Q4---------------------------------------------------
类中的对象引用的释放如果在类中引用了对象,比如:
Class1:
private colMyCOL as new Collection主窗体中引用这个类,然后unload窗体:Dim x as new Class1unload meset x = nothing**** 我的问题是: 在类中的对象引用colMyCOL变量是否也自动被撤消了呢?
VB中的数组名称后面,在什么场合需要加括号,什么场合不需要,各自表示什么含义,好象语言参考中不是很明确,偶非常头痛。例如:Dim a1(2) As Integer
Dim a2 As Varianta1(0)=1
a1(1)=2
a1(2)=3假设我想用a1给a2赋值,可以写:
a2=a1()
能否写:
a2=a1 ?
这两个表达式有何不同?什么情况下需要加括号,什么情况下不需要?Q2----------------------------------------------------
另外,同一个数组能否包含不同的类型呢?
例如:
Dim a(3) As Varianta(0)=1
a(1)="abc"
set a(2)=oObject 'oObject是一对象
a(3)=trueQ3---------------------------------------------------
ByVal和ByRef参数传递,如果ByVal应该问题不大,不过VB中如果参数是数组,则好象必须用ByRef
我有个问题,就是如果异步操作,例如:在模块1中,
intA=12345 'intA属于模块1
通过callSUB(ByRef intA)这样的子程序,假设没有进行运算,直接赋值intB=intA 'intB属于模块2然后卸载模块1,执行模块2上的要用到intB的程序。 会不会有什么问题?intA的销毁是否只是销毁了其中一个指向数据存放位置的指针?还是intA的销毁要销毁数据本身?
数据是什么时候被VB撤消的?是否所有的变量都不再引用这个数据才撤消?Q4---------------------------------------------------
类中的对象引用的释放如果在类中引用了对象,比如:
Class1:
private colMyCOL as new Collection主窗体中引用这个类,然后unload窗体:Dim x as new Class1unload meset x = nothing**** 我的问题是: 在类中的对象引用colMyCOL变量是否也自动被撤消了呢?
1:当等号左边的唯一个动态数组时可以不加()直接赋值
2:没试过,不知道^_^
3:byref的话卸载了intA,intB肯定要出问题换成byval就没事了!
4:不知道,但是我帮你顶
^_^,主要是我也要学学!
可以,你可以测试一下就知道了
q3
ByVal和ByRef他们就是一个传值和传址的区别
//MSDN
ByVal 可选的。表示该参数按值传递。
ByRef 可选的。表示该参数按地址传递。ByRef 是 Visual Basic 的缺省选项。
Q2:根据缺省规定,如果在声明中没有说明数据类型,则令变量的数据类型为 Variant。Variant 数据类型很象一条变色龙— 它可在不同场合代表不同数据类型。当指定变量为 Variant 变量时,不必在数据类型之间进行转换,Visual Basic 会自动完成各种必要的转换。
所以你的赋值应该是可以的.
Q3:你是否把inta,intb都设置为public呢?这样它们在任何窗体中的赋值都可以一直跟随.
Q1:a2=a1中的a1是数组吗?a2=a1()中的a1()是数组!
a2是个变体型变量。
我们可以将数组赋给变体型变量。
按照你的定义。
你的两个
a2=a1()
a2=a1
都是正确的!
Dim x as new Class1unload meset x = nothing
可以在上面的程序后面再写代码引用类。通过就是好用!
callSUB(ByVal intA as Variant)
这样 INTA是可以传递数组的!
还有一些疑问:
-----------------------
对Q1, rexyudl(隼) 指出:
a1()是个可变数组。
a2是个变体型变量。
我们可以将数组赋给变体型变量。 这个解释比较容易理解。 可是在声明段只声明了 DIM a1(2) AS type
并没有声明a1为Variant,然而正如上面提到的,VB将同时接受a1()[作为数组]或者a1[作为Variant],就是说VB自动隐含声明了a1为Variant,这样理解有没有问题?Q4,我希望确认类中的对collection对象的引用,即colMyCOL变量的对象引用被撤消,以便释放内存。
因为我猜想colMyCOL没有被撤消,正如x需要被设为nothing才能释放内存一样,x的对象引用并未随窗体的卸载而撤消,那么在类中可能也是一样的情况,需要在某个地方设colMyCOL=nothing,对不? 可是如果是这样,在哪里设呢?Q3,我有个更进一步的问题:
ByVal没有什么好讨论的,我想请教一下ByRef.
(因为我基于对底层不完全的认识,我不知道我的问题本身的说法有没有问题,说错了请纠正)
ByVal传递了一个地址指针,指向哪里?
VB存储的有一个变量名intA,一个Data,还有一个变量名intB
假如变量名也占一个地址空间,那么这个地址指针就可能有两种不同的指法:
1. intB-->Data 直接指向数据
2. intB-->intA-->Data 指向变量intA,而变量intA指向数据