vb.net

位置:IT落伍者 >> vb.net >> 浏览文章

VB.NET中对象的克隆[1]


发布日期:2021年01月04日
 
VB.NET中对象的克隆[1]

DMAX里面做好一个物体(父物体)以后可以选择Edit菜单中的Clone下面有三中选项Copy(生成一个同模样的子物体两者的操作互不影响)Instance(父子互动父物体的操作同样影响子物体子物体也一样)还有一个Reference(暂不考虑)

在VBNET同样会碰到这样的问题创建一个复杂对象(可能有很多种不同的数据类型)的实例进行了一系列操作之后想让一个中间变量或几个(另外的实例)保存它的状态我们一般采取逐个变量赋值有时候会写很长的代码)这实际上就是上述的Copy问题而对于Instance很简单新建一个实例指向一下就可以了

Dim objA As New CResume Cresume是一个自定义的记录简历信息的类

然后进行初始化比如

objAName=AAA

objAAddress=ShanghaiChina

……

Dim objB As New CResume 新建一个实例

objB=objA

这样的话objB跟objA有相同状态值得注意的是objB改变一个Name比如

objBName=BBB

而实际上objA的Name也变为BBB理由很简单它们指向同一块内存空间

下面我们重点讨论对象的Clone问题即Copy以后的各个对象互不影响关键是如何采用简单的方法解决我们的问题MemoryStream和BinFormatter配合一下可以很简单的把对象克隆

MemoryStream我以前提到过是支持存储区为内存的流

BinFormatter主要以二进制形式序列化和反序列化对象

主要思路

先用BinFormatter的Serialize方法把对象存储在MemoryStream流中(操作跟其他Stream一样)然后Deserialize反序列化得到一个流式的数据转化为原来对象的类型就可以了是不是很简单?呵呵看一下代码再说

CResume类的代码

Imports SystemIO

Imports SystemRuntimeSerializationFormatters

<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

[] []

               

上一篇:VB.NET中对象的克隆[2]

下一篇:VB.NET和C#逐层横向对比[1]