以前的学习经历...VB Collection对象的Add

发表时间:2006年1月19日 4时44分

今晚很郁闷,竟然为了被ByRef耍了一晚上… ,终于在偶的n遍调试下终于发现是什么问题导致的.ho~~ 爽!~做程序就是这样.我喜欢解决问题后的成就感.. 这里呢我说一下Coolection的强大功能.可以add引用的东东.今晚就是被它耍了几个小时…nnd!! 事情是这样的.. 我需要把程序返回的一个对象添加到集合对象里面去,在添加的时候呢我是这样写的:

Private   Sub  FillData(Subjects  As  Collection) 
    
Dim  temp  As   new  clsItemQuestion 
    
While   Not  myDBManager.rst.EOF 
        temp.Grade 
=   CStr (myDBManager.rst!Grade) 
        temp.ID 
=   CStr (myDBManager.rst!sub_id) 
        temp.Name 
=   CStr (myDBManager.rst!sub_name) 
        Subjects.Add temp 
        myDBManager.rst.MoveNext 
    
Wend  
    
Set  temp  =   Nothing  
End Sub  

一开始呢,我直接实例化一个类,然后为这个对象属性赋值,最后把这个对象添加到集合里面去.这里隐藏了一个很隐蔽的错误,就是集合对象存放的不是一个新的类,也就是说,它存放的就是开始实例化"Dim temp as new clsItemQuestion"这个对象,因为我只实例化了一个.所以在存放到里面之后呢,我发现无论我增加多少个,取出的数据个数虽然不会少,但里面的每一个数据都是最后一个添加进去的数据.也就是说当我第一次放进 Grade=1,ID=2,Name=abc,下次再放进去的话,前一次放进的数据会跟着当前数据变化而变化,这是因为Collection 集合对象是按引用存放的,集合里面虽然存放的对象越来越多,但终归为一个对象的引用.所以导致了所有数据(其实就是全部都是本身)都一样.要想添加对象进去,必须每次都实例化一个对象.这样的每个对象才是真正独立的对象.也就避免了上述的问题!解决代码如下:

Private   Sub  FillData(Subjects  As  Collection) 
    
Dim  temp  As  clsItemQuestion 
    
While   Not  myDBManager.rst.EOF 
        
Set  temp  =   New  clsItemQuestion 
        temp.Grade 
=   CStr (myDBManager.rst!Grade) 
        temp.ID 
=   CStr (myDBManager.rst!sub_id) 
        temp.Name 
=   CStr (myDBManager.rst!sub_name) 
        Subjects.Add temp 
        myDBManager.rst.MoveNext 
    
Wend  
    
Set  temp  =   Nothing  
End Sub

转载于:https://www.cnblogs.com/DeguangLi/archive/2010/05/31/1748364.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值