VB.NET对象克隆的主要思想是什么

发布时间:2021-10-27 18:03:19 作者:柒染
来源:亿速云 阅读:113

VB.NET对象克隆的主要思想是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

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

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

在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配合一下可以很简单的实现VB.NET对象克隆。

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

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

主要思路:

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

CResume类的代码:

Imports System.IO  Imports System.Runtime.Serialization.Formatters  < Serializable()> Public Class CResume   &lsquo;注意类前面加上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  Public Property Name() As String   Get  Return m_Name  End Get  Set(ByVal NewName As String)  m_Name = NewName End Set  End Property  Public Function Clone() As CResume  Dim BF As New Binary.BinaryFormatter()  Dim MS As New MemoryStream()  BF.Serialize(MS, Me)  MS.Position = 0 Return (CType(BF.Deserialize(MS), CResume))  End Function  End Class

在Form里面可以这样调用

Dim Resume1 As New CResume()  Dim Resume2 As New CResume()  Resume1.Name = "AAA" Resume1.Address = "office:smarttags" />Shanghai,China"  Resume2 = Resume1.Clone()  Resume1.Name = "BBB" Resume1.Address = "Beijing,China" Debug.WriteLine(Resume1.Name) &lsquo;依然是AAA  Debug.WriteLine(Resume1.Address)

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

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

推荐阅读:
  1. 聚焦JavaScript面向对象的思想
  2. 克隆对象clone

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

vb.net

上一篇:怎么更好的进行C++代码编译

下一篇:Mysql数据分组排名实现的示例分析

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》