在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