请教关于对象如何复制?

csdnzm 东莞市电子计算中心 信息技术  2003-12-08 07:03:24
请教一个stdfont对象如何复制?
dim mfont1 as new stdfont
dim mfont2 as new stdfont
mfont1.size=13
set mfont2=mfont1
如何能够把mfont1赋值给mfont2后,mfont1 的内容改变不影响 mfont2
...全文
103 点赞 收藏 9
写回复
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
AresChen 2003-12-09
我印象当中stdfont是无法驻留的,对于这类对象(ADO的Recordset对象也是如此)是无法简单的复制的。
但是对于一些自己写的对象,还是有办法的,即利用VB中的PropertyBag对象。原理很简单,对于你自己写的Class,将他的Persitable属性设置为True,这样你在Class中就会出现有关Property的两个事件,在这个两个事件中你可以从事件所提供的PropertyBag中回复和保存Class中的数据和状态等。然后对Class的调用者而言,只要使用一个PropertyBag对象去保存这个Class的一个实例,然后在让另一个这个Class的实例从刚才的PropertyBag中读取就可以了。相关内容,可以仔细阅读MSDN中以PropertyBag或Persit所搜索到的内容。
临时想了一下,不知道类似这种方式成不成,即你把一个对象复制给一个Variant,然后在把这个Variant复制给一个Byte数组,在把Byte数组复制给另一个Variant,在set目的对象等于那个新的Variant。我印象当中,好像我以前试过这种方法,但是好像对于StdFont、Recordset这一类无法驻留的对象,好像不行,你自己琢磨琢磨吧。
回复
yangfanatcsdn 2003-12-09
vb 没有提供(拷贝)构造函数,所以对象的复制确实得自己一个一个属性的赋值。
回复
szyhy810518 2003-12-09
呵呵!
up
回复
AresChen 2003-12-09
API?我不知道,没有试过。不过我想如果使用API可以的话,那么处理的原理应该是和用Byte和Variant去转换是一样的,说白了就是对象内存的copy,所以我觉得如果用variant和byte不行的话,API恐怕也不行;反之也一样,用API可以的话,用variant和byte也就可以了。
另外,可能还存在一种办法,先看一下以下的代码:
Public Function Add(Key As String, Optional sKey As String) As ActorInfo
Dim objNewMember As ActorInfo
Set objNewMember = New ActorInfo

objNewMember.Key = Key
If Len(sKey) = 0 Then
mCol.Add objNewMember
Else
mCol.Add objNewMember, sKey
End If

Set Add = objNewMember
Set objNewMember = Nothing
End Function
以上是我以前作的一个类中的一段,ActorInfo是另一个自定义的Class,这段代码也是属于标准的用VB作以Collection为基础的集合的标准代码的样子(有点饶舌啊)。我们看最后两句,
Set Add = objNewMember
Set objNewMember = Nothing
按理说我们将objNewMember赋值给Add,那么意味着Add和objNewMember应该是属于同一个东西,我们在后面一句中将objNewMember设置为nothing,Add也应该变为nothing才对,当时Add所返回的并不是nothing,而是在objNewMember被设置为nothing之前的值。这一点到底为什么,我一直没有搞懂。不过,也许可以由此引出来一种方法,就是利用类似的方式去创建一个集合,然后把要赋值的对象保存到这个集合当中。
抛砖引玉的工作我只能作到这了,剩下的大家讨论吧。
回复
DemonXHunter 2003-12-09
复制对象的方法
1。检查该对象有没有Clone方法(一般叫这个名字)
Set Obj2=Obj1.Clone()
2.自己复制属性。
回复
csdnzm 2003-12-09
AresChen,非常感谢你的解答,用api可以完成么?
回复
ufcr 2003-12-08
哈﹐看來只有自己做一個function來複製了。不過沒有通用性
回复
szyhy810518 2003-12-08
up
回复
szyhy810518 2003-12-08
up
回复
发动态
发帖子
VB基础类
创建于2007-09-28

7453

社区成员

VB 基础类
申请成为版主
社区公告
暂无公告