VB.NET中对象的克隆 (转)

VB.NET中对象的克隆 (转)[@more@]

vb.NET对象的克隆XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />

侯永锋

  在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以后的各个对象互不影响,关键是如何采用简单的方法解决我们的问题,MemoryStreamBinFormatter配合一下可以很简单的把对象克隆。

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

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

主要思路:

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

CResume类的代码:

Imports System.IO

Imports System.Runtime.Serialization.Formatters

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

  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 = "Shanghai,China"

  Resume2 = Resume1.Clone()

  Resume1.Name = "BBB"

  Resume1.Address = "Beijing,China"

  Debug.WriteLine(Resume1.Name)  ‘依然是AAA

  Debug.WriteLine(Resume1.Address) 

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


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-991712/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10752043/viewspace-991712/

网络验证系统BSPHP,VB.NET对接教程 视频地址:http://v.youku.com/v_show/id_XNDEwOTcxMzMwNA==.html VB.NET对接网络验证教程 网盘下载视频 链接: https://pan.baidu.com/s/1VV06_1uUi1vfdMBB3vyt0g 提取码: r4pw 大家好,欢迎使用bsphp网络验证系统。 下面是VB.NET对接教程 用演示后台 http://app.bsphp.com/admin 账号密码:bsphp6 然后我们下VB.NET例子:http://bsp.. 阅读详情

相关推荐

高性能.NET深度克隆解决方案基于Natasha框架

.NET的世界里,深度克隆技术是一种常见的需求,特别是在需要复制复杂的对象图时。深度克隆不仅仅是复制对象的引用,而是要复制对象本身以及它所依赖的所有对象,这就要求我们能够准确复制对象的每一个属性,包括那些非基本类型的属性。在深度克隆过程中,对象可能涉及循环引用和不可克隆对象,如文件句柄、数据库连接等,这些都需要特别处理。下面,我们将深入探讨.NET环境下的深度克隆技术,从其原理、应用场景到如何有效地实现这一技术,包括现有的各种深度克隆解决方案、面临的问题以及最佳实践策略。

weixin_33628677的博客 843

使用System.arraycopy()实现数组之间的复制

使用System.arraycopy()实现数组之间的复制

VB.NET XML和JSON序列化与反序列化

VB.NET XML和JSON序列化与反序列化,根据实体类可以快速解析XML和json文件,和生成xml,json文件

[VB.NET]克隆对象

[VB.NET]克隆对象

LekcoScript的博客 607

VB.NET对象克隆

VB.NET对象克隆侯永锋       在3DMAX里面,做好一个物体(父物体)以后,可以选择Edit菜单中的Clone,下面有三中选项:Copy(生成一个同模样的子物体,两者的操作互不影响),Instance(父子互动,父物体的操作同样影响子物体,子物体也一样),还有一个Reference(暂不考虑)。       在VB.NET,同样会碰到这样的问题。创建一个复杂对象(可能有很

Montaque & DotNet 2040

net 数组 克隆 、 拷贝

CopyTo 方法在向目标数组 复制数据之前,目标数据 必须实例化(可以不初始化元素值)目标数组名称 = (数组类型名称)源数组名称 . clone();源数组名称 . CopyTo(目标数组名称,起始位置);clone 方法 目标数组不必实例化。

Kaizen的博客 305

VB中的序列化(Serialization)和反序列化(Deserialization)过程

在Visual Basic(VB)或更广泛地说,在.NET框架中,序列化和反序列化是两个重要的概念,它们涉及将对象的状态换为可以存储或传输的格式(序列化),以及将这些格式的数据恢复回原始对象(反序列化)的过程。这些过程对于数据的持久化、网络传输以及对象间的状态共享等场景至关重要。

2402_84885073的博客 710

VB.NET中的List用法

VB.NET中的List用法分类:VB.NET2008.2.3 14:52 作者:北纬 | 评论:0 | 阅读:162 Imports System.IOImports System.Data.OleDbPublic Class Form_mobilecodeFilter    Public list As New List(Of String)    Publ

深山樵夫 4776

VB.NET对象克隆 (载+亲自实践)

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

bigheadsheep的专栏 3311

vb 6.0中克隆任何对象

vb6中克隆总是很痛苦。 弄错代码是如此容易,并且它引起的问题无穷无尽-通常是堆栈溢出。 在.Net中,您无需再进行任何克隆-您只需序列化对象,然后将其复制到目标对象中即可。 该技术得到了广泛的使用和描述-但是将它与泛型一起使用很有趣,因为这意味着您可以在应用程序中的任何位置使用它。 这是显示示例的代码示例: PublicFunctionCloneObject(OfT)(ByVal...

IT与开发人员的地盘 544

.NET对象克隆的深究 选择自 qwbyxw 的 Blog

By Manoj G Posted 1 Aug 2003Applied to:VB.NET, XP, W2K, .NET 1.1, Win9X摘要:本文讨论了为什么需要对象克隆,怎样克隆以及对克隆的一些思考。Download source files - 10 Kb 简介本文我将讨论.NET编程中一个比较感兴趣的方面——对象克隆。下面将讨论对象克隆的必要性、对象

HERO 507

[VB.NET]串行化数据

串行化数据 实例说明在本实例中,我们将利用VB.NET向大家展示一个串行化数据的实例。程序运行结果如图55-1所示。图55-1 运行结果技术要点l 串行化的概念l 进行读写操作实现过程<!--google_ad_client = "pub-8333940862668978";/* 728x90, 创建于 08-11-30 */google_ad_slot

VB.NET学习网-VB.NET实例、VB.NET教程、VB.NET源码下载 582

.NET对象克隆的深究

By Manoj G Posted 1 Aug 2003Applied to:VB.NET, XP, W2K, .NET 1.1, Win9X摘要:本文讨论了为什么需要对象克隆,怎样克隆以及对克隆的一些思考。Download source files - 10 Kb 简介本文我将讨论.NET编程中一个比较感兴趣的方面——对象克隆。下面将讨论对象克隆的必要性、对象

qwbyxw的专栏 1280

[VB.NET]vb.net中如何将两个结构不同的DATATABLE合并成一个DATATABLE

vb.net中如何将两个结构不同的DATATABLE合并成一个DATATABLEvb.net中如何将两个结构不同的DATATABLE合并成一个DATATABLE__________________________________________________________________________Public Class Form1 Private Sub Form1_Load(By

VB.NET学习网-VB.NET实例、VB.NET教程、VB.NET源码下载 1273

VB.NET中的对象序列

<!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--><script type="text/javascript"

zgqtxwd的专栏 581

VB.NET学习笔记:操作数据集DataSet中DataTable数据行(DataRow)——新增、插入、复制、克隆

通常我们都知道可以使用OleDbDataAdapter对象的Fill方法从数据源检索数据并填充DataSet 中的DataTable,其实我们也可以人工为DataTable添加DataRow。 一、Rows.Add和Rows.InsertAt方法 Add和InsertAt方法都可以把新行添加到DataTable。 新一个Windows应用程序,在Form1窗体拉入一个按钮和DataGridView...

zyjq52uys的博客 1万+

】浅谈VB.NET中的接口 - 妖居 - 博客园

首 页 阅览室 馆友 我的图书馆 浅谈VB.NET中的接口 - 妖居 - 博客园 收藏人:夜的影子 2010-03-20 | 阅:  :  |  分享    |

zslefour的专栏 2086

如何用VB.NET开发Windows桌面GLM-TTS控制程序

通过VB.NET构建Windows桌面应用,封装GLM-TTS的Web API调用,实现无需命令行操作的语音合成工具。支持音频上传、参数配置与本地播放,降低AI语音技术使用门槛,提升非技术人员的操作体验。

weixin_42608299的博客 981

Vb.net 复制类

Public Class Form1 Public Class A1 : Implements ICloneable    Public para1 As String = "111"    Public para2 As String = "222"         Public Function Clone() As Object Implements System.ICloneabl

日々精進 1543
上一篇: The Ultimate (DLL) Header File (转)
下一篇: Js中实现拼音和UrlEncode的功能(利用GB和Unicode对照表) (转)
csd3176
博客等级 码龄11年 20粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值