你现在位置:首页>技术论文>软件知识>正文
VB下集合的应用
日期:2008-6-15 22:55:51 来源:本站整理  
点击: 作者:
点击【】放大字体.

做编程的人对集合都比较熟悉了,但是,在应用中,还是稍加注意的,在我使用中发现一些有趣的现象与大家共享:

WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

WWW_P※LCJS_COM-PLC-)技.术_网

假设这样一种情况:我们从数据库或文本文件中读取一批数据,想放入集合,试试用以下语句读取:
WWW_PL※CJS_COM-PLC-技.术_网

WWW_P※LCJS_CO※M-PLC-技-.术_网

dim i as integer
WWW_P※LCJS_COM-PLC-)技.术_网

WWcW_PLCJS_COM-PLC-技.术_网

dim IntCollection as new Collection
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

for i=0 to 1000
WWW_PLCJS@_COM%-PLC-技.术_网

WWW_PLCJS@_COM%-PLC-技.术_网

       IntCollection.add i
WW.W_PLC※JS_C,OM-PL,C-技.术_网

P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

next i
WWW_P※LCJS_COM-PLC-)技.术_网

P.L.C.技.术.网——可编程控制器技术门户

这个在实际运行中是OK的,但是有下一种情况:我们要把某些类放入到集合中去,那么用如下语句试试:
WW.W_PLCJS_COM-PLC-技.术_网

WWW_PLCJS@_COM%-PLC-技.术_网

Class MyTest
——可——编——程——控-制-器-技——术——门——户

W1WW_P4LCJS_COM-PLC-技.术_网

        Option Explicit
WW.W_PLCJS_COM-PLC-技.术_网

WW.W_PLC※JS_C,OM-PL,C-技.术_网

保持属性值的局部变量
WWW_P※LCJS_CO※M-PLC-技-.术_网

Private mvarCurrentTemp As Single 局部复制
WWW_P※LCJS_COM-PLC-)技.术_网

Private mvarMotor_Status As Byte 局部复制
WWW_PLCJS@_COM%-PLC-技.术_网

Private mvarValve_Status As Boolean 局部复制
WWW_PL※CJS_COM-PLC-技.术_网

保持属性值的局部变量
WWW_PLCJS_COM-PLC-技.术_网

Private mvarHi_ControlTemp As Single 局部复制
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

Private mvarLo_ControlTemp As Single 局部复制
——可——编——程——控-制-器-技——术——门——户

Private mvarHiLimitTemp As Single 局部复制
WWW_PLCJS@_COM%-PLC-技.术_网

保持属性值的局部变量
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

Private mvarTimeStamp As Date 局部复制
——可——编——程——控-制-器-技——术——门——户

Public Property Let TimeStamp(ByVal vData As Date)
plcjs.技.术_网

向属性指派值时使用,位于赋值语句的左边。
WW.W_PLC※JS_C,OM-PL,C-技.术_网

Syntax: X.TimeStamp = 5
WWW_PLC※JS_COM-PmLC-技.术_网

    mvarTimeStamp = vData
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

End Property
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

Public Property Get TimeStamp() As Date
plcjs.技.术_网

检索属性值时使用,位于赋值语句的右边。
WW.W_PLCJS_COM-PLC-技.术_网

Syntax: Debug.Print X.TimeStamp
WWcW_PLCJS_COM-PLC-技.术_网

    TimeStamp = mvarTimeStamp
WWW_PLC※JS_COM-PmLC-技.术_网

End Property
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

WW.W_PLCJS_COM-PLC-技.术_网

Public Property Let HiLimitTemp(ByVal vData As Single)
WWW_P※LCJS_COM-PLC-)技.术_网

向属性指派值时使用,位于赋值语句的左边。
P.L.C.技.术.网——可编程控制器技术门户

Syntax: X.HiLimitTemp = 5
WWW_PLC※JS_COM-PmLC-技.术_网

    mvarHiLimitTemp = vData
WW.W_PLCJS_COM-PLC-技.术_网

End Property
P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

Public Property Get HiLimitTemp() As Single
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

检索属性值时使用,位于赋值语句的右边。
WWW_P※LCJS_CO※M-PLC-技-.术_网

Syntax: Debug.Print X.HiLimitTemp
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

    HiLimitTemp = mvarHiLimitTemp
WWW_P※LCJS_CO※M-PLC-技-.术_网

End Property
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

WWW_P※LCJS_COM-PLC-)技.术_网

Public Property Let Lo_ControlTemp(ByVal vData As Single)
WWcW_PLCJS_COM-PLC-技.术_网

向属性指派值时使用,位于赋值语句的左边。
WWW_P※LCJS_COM-PLC-)技.术_网

Syntax: X.Lo_ControlTemp = 5
WWW.PLCJS.COM——可编程控制器技术门户

    mvarLo_ControlTemp = vData
WWcW_PLCJS_COM-PLC-技.术_网

End Property
WWcW_PLCJS_COM-PLC-技.术_网

WWW_PLCJS_COM-PLC-技.术_网

end Cass
WWW_P※LCJS_CO※M-PLC-技-.术_网

WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

然后用下面语句试试:
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

WWW.PLCJS.COM——可编程控制器技术门户

dim MyCollection as new Collection
WWcW_PLCJS_COM-PLC-技.术_网

WWW_PLC※JS_COM-PmLC-技.术_网

sub GetCollection()
P.L.C.技.术.网——可编程控制器技术门户

WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

for i=0 to 1000
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

plcjs.技.术_网

     dim Temp as new MyTest
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

WWW_PLCJS_COM-PLC-技.术_网

Temp.TimeStamp=now()
P.L.C.技.术.网——可编程控制器技术门户

WWW.PLCJS.COM——可编程控制器技术门户

Temp.HiLimitTemp=rnd()*100
WWW_P※LCJS_COM-PLC-)技.术_网

WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

MyCollection.add Temp
WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

WWW_PLC※JS_COM-PmLC-技.术_网

next i
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

WWW_PLC※JS_COM-PmLC-技.术_网

end sub
WW.W_PLC※JS_C,OM-PL,C-技.术_网

WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

通过这条语句,我们发现集合里面只有最后一个数据,当然个数还是一个不少1001个,但是它的每一个数据都是相同的,我没有去仔细查阅一些资料,我认为,集合内部放的是个指针,定义了一个变量后,其指针但始固定了,因次每次向集合里加一个Item,它只是把指针放入到集合里面去了,因此在上面程序中,它只是始终把Temp指针放入集合中去,最终导致集合中只有一组数据.
W1WW_P4LCJS_COM-PLC-技.术_网

WWW_P※LCJS_CO※M-PLC-技-.术_网

实际上,上面的代码只要稍微改动一下就可以了:
WWW_PLCJS@_COM%-PLC-技.术_网

WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

dim MyCollection as new Collection
——可——编——程——控-制-器-技——术——门——户

WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

sub GetCollection()
WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)

WWW_PLCJS_COM-PLC-技.术_网

for i=0 to 1000
plcjs.技.术_网

P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户

dim k as single
WWcW_PLCJS_COM-PLC-技.术_网

WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

k=rnd()*100
WWW_PLC※JS_COM-PmLC-技.术_网

WWW.PLCJS.COM——可编程控制器技术门户

AddToCollection(k)
——可——编——程——控-制-器-技——术——门——户

WWW_PLC※JS_COM-PmLC-技.术_网

    next i
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

end sub
WWW_PL※CJS_COM-PLC-技.术_网

——可——编——程——控-制-器-技——术——门——户

sub AddToCollection(byval k as single)
WW.W_PLC※JS_C,OM-PL,C-技.术_网

WWW_P※LCJS_CO※M-PLC-技-.术_网

dim Temp as new MyTest
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)

WW.W_PLCJS_COM-PLC-技.术_网

Temp.TimeStamp=now()
WW.W_PLC※JS_C,OM-PL,C-技.术_网

WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)

Temp.HiLimitTemp=k
WW.W_PLC※JS_C,OM-PL,C-技.术_网

WWW_PL※CJS_COM-PLC-技.术_网

MyCollection.add Temp
WWW_PLCJS@_COM%-PLC-技.术_网

WWW_PLC※JS_COM-PmLC-技.术_网

end sub
WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)

——可——编——程——控-制-器-技——术——门——户

这样就可以了,为什么呢,因为调用函数每次都分配一些内存给Temp类,然后将Temp类的指针交给集合,下一次调用时,就可以,由于这一块内存被占用了,系统会重新开辟一块内存空间给函数,这样就实现了集合数据的正确填充.
——可——编——程——控-制-器-技——术——门——户

plcjs.技.术_网

在VB中,集合的概念还不够强,但在VB2005里面,很多东西都用到了集合的概念,学好这个东西对于程序开发有极大的好处.
WWW.PLCJS.COM——可编程控制器技术门户

WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)

评论内容
载入中...
载入中...
P
L
C



|










|


P
L
C









·最新招聘信息
·最新求职信息
·推荐产品
·推荐厂商
·栏目热门排行
·站内热门排行