VB.NET中对象的克隆

网络验证系统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.. 阅读详情

VB.NET中对象的克隆

侯永锋

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

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

       Dim objA  As New CResume  ‘Cresume是一个自定义的记录简历信息的类

然后进行初始化,比如:

       objA.Name=”AAA”

       objA.Address=”ShanghaiChina”

       ……

       Dim objB  As New CResume  新建一个实例

       objBobjA

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

       objB.Name=”BBB”

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

 

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

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

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

主要思路:

先用BinFormatterSerialize方法,把对象存储在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

 

    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的流和序列化技术,使得对象的克隆免去了繁琐的读写操作,也简化了代码。

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

相关推荐

.net下的对象拷贝

Omu.ValueInjecter.dll 更多信息请移步http://valueinjecter.codeplex.com/

浅谈.net平台下深拷贝和浅拷贝

.net类库中,对象克隆广泛存在于各种类型的实现中,凡是实现了ICloneable接口的类型都具备克隆对象实例的能力。所以本文讲述的深拷贝和浅拷贝也是在实现ICloneable接口的基础上进行的

VB使用指针adress进行内存拷贝

使用windows api可以在VB中方便的进行内存的拷贝操作,这省去了很多反复的赋值操作,效率很高。在串口通信,协议转换一类的程序上尤其有用。

[VB.NET]克隆对象

[VB.NET]克隆对象

LekcoScript的博客 607

VB.NET对象克隆 (转)

VB.NET对象克隆 (转)[@more@]vb.NET对象克隆XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" /> ...

csd3176的博客 370

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

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

bigheadsheep的专栏 3311

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 6.0中克隆任何对象

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

IT与开发人员的地盘 544

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

实现Prototype设计模式

<!--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的专栏 220

读网

屏蔽.NET自定义开发组件中的属性 如何取得三个键盘提示灯当前状态 VB.NET对象克隆 如何下载完整的IE6SP1 针对 .NET 框架的安全编码指南 软件文档学习DotNet经典网站 Reflector 插件SQL语句导入导出大全 海量数据库的查询优化及分页算法方案 API函数大全(转载) 碧雪的博客网 .NET中打印包含有格式的 RichTextBox 的内容 向其他进程注入代码的三种方

水如烟 1527

.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

.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向大家展示一个串行化数据的实例。程序运行结果如图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

[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中的流(Stream) (三)
下一篇: VB.NET访问COM+
Montaque
博客等级 码龄25年 63粉丝 71原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值