我想自动克隆一个对象,而不必实例化一个新对象并手动复制每个变量。
我记得以前(当我每天都在做VB6时)我用PropertyBag的方法克隆对象,这非常酷。但是我已经丢失了代码,也不记得如何操作了。
有人还记得或者有其他方法吗?
我想自动克隆一个对象,而不必实例化一个新对象并手动复制每个变量。
我记得以前(当我每天都在做VB6时)我用PropertyBag的方法克隆对象,这非常酷。但是我已经丢失了代码,也不记得如何操作了。
有人还记得或者有其他方法吗?
我过去使用的方法是将所有实例变量放在一个UDT中。只要您保持UDT最新,就可以使用单个方法/语句复制类的数据。
以“Person”类为例,这里有一个简单的示例:
Private Type tPerson
ID As Long
FirstName As String
LastName As String
End Type
Private m_Person As tPerson
Public Sub InitPerson(ID As Long, FirstName As String, LastName As String)
m_Person.ID = ID
m_Person.FirstName = FirstName
m_Person.LastName = LastName
End Sub
Friend Sub SetData(PersonData As tPerson)
m_Person = PersonData
End Sub
Public Function GetClone() As Person
Dim p As New Person
p.SetData m_Person
Set GetClone = p
End Function
Public Property Get FirstName() As String
FirstName = m_Person.FirstName
End Property
尝试这段代码:
Dim p As New Person
p.InitPerson 1, "MyName", "MyLastName"
Dim p2 As Person
Set p2 = p.GetClone
MsgBox p2.FirstName
如果您将所有实例变量都放入UDT中而不是单独声明它们,那么您可以拥有一个非常少维护的简单克隆方法。
另一个优点是您可以将UDT放入文件句柄中,以便快速序列化到磁盘。
Public Sub Save(filePathName As String)
Dim f As Integer
f = FreeFile()
Open filePathName For Binary Access Write Lock Read Write As #f
Put #f, , m_Person
Close #f
End Sub
请问 this 是您正在寻找的内容吗?以下是文章的原文,供参考。
将数据放入 PropertyBag 对象中,然后读取 PropertyBags Contents 属性,即可快速地序列化数据。该属性实际上是一个字节数组,它是您的 PropertyBag 对象中数据的串行表示形式。您可以将这个字节数组用于许多目的,包括在 DCOM 上进行高效的数据传输:
Private Function PackData() As String
Dim pbTemp As PropertyBag
'Create a new PropertyBag object
Set pbTemp = New PropertyBag
With pbTemp
'Add your data to the PB giving each item a
'unique string key
Call .WriteProperty("FirstName", "John")
Call .WriteProperty("MiddleInitial", "J")
Call .WriteProperty("LastName", "Doe")
'Place the serialized data into a string
'variable.
Let PackData = .Contents
End With
Set pbTemp = Nothing
End Function
Private Sub UnPackData(sData As String)
Dim pbTemp As PropertyBag
Dim arData() As Byte
'Convert the string representation of the data to
'a Byte array
Let arData() = sData
'Create a new PropertyBag object
Set pbTemp = New PropertyBag
With pbTemp
'Load the PropertyBag with data
Let .Contents = arData()
'Retrieve your data using the unique key
Let m_sFirstName = .ReadProperty("FirstName")
Let m_sMiddleInitial = _
.ReadProperty("MiddleInitial")
Let m_sLastName = .ReadProperty("LastName")
End With
Set pbTemp = Nothing
End Sub
迈克·库尔茨,宾夕法尼亚州麦基斯罗克斯