VB.NET对象克隆的应用法则

开发 后端
VB.NET对象克隆的实现在实际编程中是一个非常重要的作用。我们可以通过本文介绍的内容详细对此进行一个了解,并掌握这一应用技巧。

VB.NET编程语言的应用范围非常广泛,比如在数据库的连接方面,对于Excle的操作,对于界面的操作等等方面。我们在这里会为大家介绍一下有关VB.NET对象克隆的实现方法,并对其实现的功能进行一个初步的掌握。

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

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

 

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

 

 

在Form里面可以这样调用

 

  1. Dim Resume1 As New CResume()  
  2. Dim Resume2 As New CResume()  
  3. Resume1.Name = "AAA" 
  4. Resume1.Address = "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对象克隆免去了繁琐的读写操作,也简化了代码。

责任编辑:曹凯 来源: CSDN
相关推荐

2010-01-19 18:45:25

VB.NET窗体嵌套

2010-01-22 13:28:13

VB.NET对象克隆

2009-10-09 15:59:41

VB.NET对象

2009-10-14 13:21:46

VB.NET Acco

2010-01-12 16:20:44

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-12 18:05:38

VB.NET对象

2009-10-30 11:20:54

VB.NET Proc

2010-01-21 18:35:56

VB.NET Impo

2010-07-06 15:54:30

VB.NET UDP

2009-11-02 15:57:36

VB.NET WEB

2009-11-10 16:46:52

VB.NET指针应用

2010-01-07 15:25:11

VB.NET数组

2009-10-13 11:28:39

VB.NET面向对象编

2009-10-22 10:10:20

VB.NET Proc

2009-10-13 14:19:03

VB.NET面向对象编

2009-06-29 10:50:18

VB.NET面向对象能力
点赞
收藏

51CTO技术栈公众号