社区
VB
帖子详情
关于对象的拷贝!
XQfish
2004-08-24 09:54:03
在复制对象的时候,想要进行深拷贝,用vb代码如何实现!
...全文
179
4
打赏
收藏
关于对象的拷贝!
在复制对象的时候,想要进行深拷贝,用vb代码如何实现!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fangpeng2003
2004-08-24
打赏
举报
回复
【转】
VB.NET中对象的克隆
侯永锋
在3DMAX里面,做好一个物体(父物体)以后,可以选择Edit菜单中的Clone,下面有三中选项:Copy(生成一个同模样的子物体,两者的操作互不影响),Instance(父子互动,父物体的操作同样影响子物体,子物体也一样),还有一个Reference(暂不考虑)。
在VB.NET,同样会碰到这样的问题。创建一个复杂对象(可能有很多种不同的数据类型)的实例,进行了一系列操作之后,想让一个中间变量或几个(另外的实例)保存它的状态,我们一般采取逐个变量赋值,有时候会写很长的代码:)这实际上就是上述的Copy问题。而对于Instance,很简单,新建一个实例,指向一下就可以了:
Dim objA As New CResume ‘Cresume是一个自定义的记录简历信息的类
然后进行初始化,比如:
objA.Name=”AAA”
objA.Address=”Shanghai,China”
……
Dim objB As New CResume ‘新建一个实例
objB=objA
这样的话,objB跟objA有相同状态,值得注意的是objB改变一个Name,比如:
objB.Name=”BBB”
而实际上,objA的Name也变为“BBB”,理由很简单。它们指向同一块内存空间。
下面我们重点讨论对象的Clone问题,即Copy以后的各个对象互不影响,关键是如何采用简单的方法解决我们的问题,MemoryStream和BinFormatter配合一下可以很简单的把对象克隆。
MemoryStream,我以前提到过,是支持存储区为内存的流。
BinFormatter,主要以二进制形式序列化和反序列化对象。
主要思路:
先用BinFormatter的Serialize方法,把对象存储在MemoryStream流中,(操作跟其他Stream一样),然后Deserialize反序列化,得到一个流式的数据,转化为原来对象的类型就可以了。是不是很简单?呵呵。看一下代码再说:
CResume类的代码:
Imports System.IO
Imports System.Runtime.Serialization.Formatters
<Serializable()> Public Class CResume
‘注意类前面加上Serializable()属性,否则不可以序列化
Dim m_Name As String '姓名
Dim m_Address As String '地址
Public Property Address() As String
Get
Return m_Address
End Get
Set(ByVal NewAddress As String)
m_Address = NewAddress
End Set
End Property
Public Property Name() As String
Get
Return m_Name
End Get
Set(ByVal NewName As String)
m_Name = NewName
End Set
End Property
Public Function Clone() As CResume
Dim BF As New Binary.BinaryFormatter()
Dim MS As New MemoryStream()
BF.Serialize(MS, Me)
MS.Position = 0
Return (CType(BF.Deserialize(MS), CResume))
End Function
End Class
在Form里面可以这样调用
Dim Resume1 As New CResume()
Dim Resume2 As New CResume()
Resume1.Name = "AAA"
Resume1.Address = "Shanghai,China"
Resume2 = Resume1.Clone()
Resume1.Name = "BBB"
Resume1.Address = "Beijing,China"
Debug.WriteLine(Resume1.Name) ‘依然是AAA
Debug.WriteLine(Resume1.Address)
总结:主要调用了VB.NET的流和序列化技术,使得对象的克隆免去了繁琐的读写操作,也简化了代码。
XQfish
2004-08-24
打赏
举报
回复
不同类都要写不同的深拷贝方法么? 那代码如何写呢?MemberwiseClone() 是Protected 属性,在非继承对象中如何对其它对象进行深拷贝呢?
CMIC
2004-08-24
打赏
举报
回复
浅拷贝可以通过object的MemberwiseClone()方法,深拷贝对应不同对象写不同的代码。
Protected Function MemberwiseClone() As Object
wnlovezxm
2004-08-24
打赏
举报
回复
顶上去!
区块链之Go语言设计模式
同时跟几个MM聊天时,一定要记清楚刚才跟MM说了些什么话,不然MM发现了会不高兴的哦,幸亏我有个备忘录,刚才与哪个MM说了什么话我都
拷贝
一份放到备忘录里面保存,这样可以随时察看以前的记录啦。 &...
JavaScript
对象
拷贝
函数实现
关于
对象
拷贝
方法的设计,我希望可以达到以下几点要求: 1.
对象
实例内的函数属性仅进行指针
拷贝
。 2.
对象
实例内的Array和非Function并且非null的
对象
属性进行深度全量
拷贝
。 3. 继承被
拷贝
对象
实例内所有符合...
Java
对象
拷贝
以及常用
对象
拷贝
工具
许久没有更新过,最近因为这个问题引发线上bug,特再次整理汇总!...Java语言中
对象
拷贝
分为深
拷贝
和浅
拷贝
以及
对象
简单的引用
拷贝
(也就是通常使用的
对象
赋值)。 1.1 引用
拷贝
引用
拷贝
即
对象
的赋值操作,就
java引用
拷贝
,
对象
浅
拷贝
,
对象
深
拷贝
JAVA
对象
拷贝
分为两种方式,一种是引用
拷贝
,一种是
对象
拷贝
引用
拷贝
:和
对象
拷贝
的不同之处在于,引用
拷贝
只会生成一个新的
对象
引用地址,但两个地址其最终指向的还是同一个
对象
;
对象
拷贝
:这种方式会重新生成...
Java
对象
拷贝
工具类
我们在Java编码中,有时候可能会经常遇到
对象
拷贝
的场景。比如(1)当我们更新一个
对象
的时候,如果要记录
对象
属性的前后变化,那么在更新
对象
之前,我们应该首先将
对象
拷贝
暂存起来,且这个时候的
拷贝
一定是深
拷贝
...
VB
16,555
社区成员
110,528
社区内容
发帖
与我相关
我的任务
VB
VB技术相关讨论,主要为经典vb,即VB6.0
复制链接
扫一扫
分享
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章