是的,完全正确! 记住 类在vb下是特殊的,所有 set a = b 其实都是同一个对象,set a=nothing 只是减少一个计数,并不是真正让这个对象消失了,这和c是不同的, 我继续多说一点,这点是很多vb高手都弄不清楚的(因为他们并不知道什么是对象的本质,也就是没有很好的C++基础),在vb中对象的传递统统是按址的(byref)即使你指明按值 (byval),那也不是真正的按值,传过去的还是地址的值(用c的话就是本质还是传的指针) 详细举例如下: '1 执行了下面的语句以后,其实 a,b,c,d 都是同一个对象,这就是我前面说的引用计数 set a=b:set c=b :set d = a '2 清除的问题 set a=nothing:set b=nothing:set c=nothing ' 这个时候 a,b,c 都是nothing , 但是对象并没有真正删除,d 还是存在的 set d =nothing ‘这个时候对象没有了,因为计数为0了,所以发现是0的时候就真正的清楚了内存了。 '3 类做为参数的时候的问题 sub test1(byval tp class1) tp.num=tp.num+1 end sub '其实和 sub test2(byref tp class1) tp.num=tp.num+1 end sub '表现起来没有什么不同 dim tp1 as new class1 dim tp2 as new class1 tp1.num=0:tp2.num=0 call test1(tp1):call test2(tp2) '这个时候tp1 和 tp2 的num 都是1,也就是说byval和 byref 一样,传入的类在函数内部变化以后,类也就变化了(当然,因为根本就是同一个类,不管你byval还是byref) |