在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
[] []