VB.NET对象克隆主要思想

开发 后端
VB.NET对象克隆可以通过MemoryStream和BinFormatter来简单的实现。那么具体的操作方法将会在这篇文章中为大家详细介绍。

VB.NET编程语言中对对象的操作是比较重要的一个操作技巧,对于一个具有面向对象特性的编程语言,我们要想彻底掌握这一语言的应用,就应当把这些特性把握好。在这里就先来一起了解一下VB.NET对象克隆的一些基本概念。

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

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

  1. Dim objA As New CResume ‘Cresume 

是一个自定义的记录简历信息的类

然后进行初始化,比如:

 

  1. objA.Name=”AAA”  
  2. objA.Address=”Shanghai,China”  
  3. ……  
  4. Dim objB As New CResume ‘新建一个实例  
  5. objB=objA 

 

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

 

  1. objB.Name=”BBB” 

 

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

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

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

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

主要思路:

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

CResume类的代码:

 

  1. Imports System.IO  
  2. Imports System.Runtime.Serialization.Formatters  
  3. < Serializable()> Public Class CResume   
  4. ‘注意类前面加上Serializable()属性,否则不可以序列化  
  5. Dim m_Name As String '姓名  
  6. Dim m_Address As String '地址  
  7. Public Property Address() As String  
  8. Get  
  9. Return m_Address  
  10. End Get  
  11. Set(ByVal NewAddress As String)  
  12. m_Address = NewAddress 
  13. End Set  
  14. End Property  
  15. Public Property Name() As String   
  16. Get  
  17. Return m_Name  
  18. End Get  
  19. Set(ByVal NewName As String)  
  20. m_Name = NewName 
  21. End Set  
  22. End Property  
  23. Public Function Clone() As CResume  
  24. Dim BF As New Binary.BinaryFormatter()  
  25. Dim MS As New MemoryStream()  
  26. BF.Serialize(MS, Me)  
  27. MS.Position = 0 
  28. Return (CType(BF.Deserialize(MS), CResume))  
  29. End Function  
  30. End Class 

 

在Form里面可以这样调用

 

  1. Dim Resume1 As New CResume()  
  2. Dim Resume2 As New CResume()  
  3. Resume1.Name = "AAA" 
  4. Resume1.Address = "office:smarttags" />Shanghai,China"  
  5. Resume2 = Resume1.Clone()  
  6. Resume1.Name = "BBB" 
  7. Resume1.Address = "Beijing,China" 
  8. Debug.WriteLine(Resume1.Name) ‘依然是AAA  
  9. Debug.WriteLine(Resume1.Address)  

 

总结:主要调用了VB.NET的流和序列化技术,使得VB.NET对象克隆免去了繁琐的读写操作,也简化了代码。

责任编辑:曹凯 来源: wewill.cn
相关推荐

2010-01-15 16:59:52

VB.NET对象克隆

2009-10-09 15:59:41

VB.NET对象

2009-10-10 17:06:09

VB和VB.NET

2010-01-12 11:47:09

VB.NET可选参数

2009-10-14 13:21:46

VB.NET Acco

2010-01-12 18:05:38

VB.NET对象

2009-10-30 11:20:54

VB.NET Proc

2010-01-11 09:33:32

VB.NET对话框调用

2009-10-13 17:03:55

VB.NET面向对象

2009-10-23 14:06:07

VB.NET类对象

2009-10-12 16:39:59

OracleTransVB.NET使用

2009-11-02 16:22:16

VB.NET面向对象

2010-01-19 15:08:18

VB.NET对象成员

2010-01-21 12:55:08

VB.NET对象序列

2009-11-03 10:09:48

VB.NET对象

2010-01-21 16:17:32

VB.NET文件对象

2009-10-20 17:38:20

VB.NET exce

2009-10-12 16:51:28

VB.NET使用Ora

2010-01-12 17:21:29

VB.NET对象

2010-01-13 11:18:24

VB.NET面向对象
点赞
收藏

51CTO技术栈公众号