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变量是否也自动被撤消了呢?

解决方案 »

  1.   

    我知道两个问题:
    1:当等号左边的唯一个动态数组时可以不加()直接赋值
    2:没试过,不知道^_^
    3:byref的话卸载了intA,intB肯定要出问题换成byval就没事了!
    4:不知道,但是我帮你顶
    ^_^,主要是我也要学学!
      

  2.   

    Q2,Q3可以测试出来的。Q1偶想知道为什么。Q4眼下不知道如何测出来,所以非高人解答不可。谢谢楼上的千斤顶^_^
      

  3.   

    q2 
    可以,你可以测试一下就知道了
    q3
    ByVal和ByRef他们就是一个传值和传址的区别
    //MSDN
    ByVal 可选的。表示该参数按值传递。 
    ByRef 可选的。表示该参数按地址传递。ByRef 是 Visual Basic 的缺省选项。 
      

  4.   

    Q4:类中的对象没有被撤消,你可以人为的把它关闭.测试一下,就是再一次引用这个类,看看是否还存在就可以了!
    Q2:根据缺省规定,如果在声明中没有说明数据类型,则令变量的数据类型为 Variant。Variant 数据类型很象一条变色龙— 它可在不同场合代表不同数据类型。当指定变量为 Variant 变量时,不必在数据类型之间进行转换,Visual Basic 会自动完成各种必要的转换。
    所以你的赋值应该是可以的.
    Q3:你是否把inta,intb都设置为public呢?这样它们在任何窗体中的赋值都可以一直跟随.
    Q1:a2=a1中的a1是数组吗?a2=a1()中的a1()是数组!
      

  5.   

    a1()是个可变数组。
    a2是个变体型变量。
    我们可以将数组赋给变体型变量。
    按照你的定义。
    你的两个
    a2=a1()
    a2=a1
    都是正确的!
      

  6.   

    对Q3,如果你想赋值数组,可以使用CopyMemory函数啊!!!
      

  7.   

    问题四 类未被撤消,因为再次引用类还是好用的!
    Dim x as new Class1unload meset x = nothing
    可以在上面的程序后面再写代码引用类。通过就是好用!
      

  8.   

    关于第三个问题,不过VB中如果参数是数组可以把参数做为变体型变量完成传递。
    callSUB(ByVal intA as Variant)
    这样 INTA是可以传递数组的!
      

  9.   

    Thanks for all.还想再保留几天这个问题。 
    还有一些疑问:
    -----------------------
    对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指向数据
      

  10.   

    上面写错了,本想说“ByRef传递了一个地址指针”
      

  11.   

    Q4中,对象引用未被撤消。 参见TearDown方法。