VB.NET中怎么實(shí)現(xiàn)對(duì)象克隆

VB.NET中怎么實(shí)現(xiàn)對(duì)象克隆,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。

成都創(chuàng)新互聯(lián)自2013年起,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、外貿(mào)營銷網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元梅江做網(wǎng)站,已為上家服務(wù),為梅江各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792

在3DMAX里面,做好一個(gè)物體(父物體)以后,可以選擇Edit菜單中的Clone,下面有三中選項(xiàng):Copy(生成一個(gè)同模樣的子物體,兩者的操作互不影響),Instance(父子互動(dòng),父物體的操作同樣影響子物體,子物體也一樣),還有一個(gè)Reference(暫不考慮)。

在VB.NET,同樣會(huì)碰到這樣的問題。創(chuàng)建一個(gè)復(fù)雜對(duì)象(可能有很多種不同的數(shù)據(jù)類型)的實(shí)例,進(jìn)行了一系列操作之后,想讓一個(gè)中間變量或幾個(gè)(另外的實(shí)例)保存它的狀態(tài),我們一般采取逐個(gè)變量賦值,有時(shí)候會(huì)寫很長的代碼:)這實(shí)際上就是上述的Copy問題。而對(duì)于Instance,很簡單,新建一個(gè)實(shí)例,指向一下就可以了:

Dim objA As New CResume ‘Cresume是一個(gè)自定義的記錄簡歷信息的類

然后進(jìn)行初始化,比如:

  1. objA.Name=”AAA”  

  2. objA.Address=”Shanghai,
    China”  

  3. ……  

  4. Dim objB As New CResume 
    ‘新建一個(gè)實(shí)例  

  5. objB=objA 

這樣的話,objB跟objA有相同狀態(tài),值得注意的是objB改變一個(gè)Name,比如:

objB.Name=”BBB”

而實(shí)際上,objA的Name也變?yōu)椤癇BB”,理由很簡單。它們指向同一塊內(nèi)存空間。

  • 如何正確實(shí)現(xiàn)VB.NET重載Windows控件

  • VB.NET調(diào)用DLL實(shí)現(xiàn)方法解析

  • VB.NET讀寫文本文件具體代碼編寫方式介紹

  • VB.NET對(duì)象存儲(chǔ)各種方法簡介

  • VB.NET集合存儲(chǔ)內(nèi)容解析

下面我們重點(diǎn)討論對(duì)象的Clone問題,即Copy以后的各個(gè)對(duì)象互不影響,關(guān)鍵是如何采用簡單的方法解決我們的問題,MemoryStream和BinFormatter配合一下可以很簡單的把VB.NET對(duì)象克隆。

MemoryStream,我以前提到過,是支持存儲(chǔ)區(qū)為內(nèi)存的流。

BinFormatter,主要以二進(jìn)制形式序列化和反序列化對(duì)象。

主要思路:

先用BinFormatter的Serialize方法,把對(duì)象存儲(chǔ)在MemoryStream流中,(操作跟其他Stream一樣),然后Deserialize反序列化,得到一個(gè)流式的數(shù)據(jù),轉(zhuǎn)化為原來對(duì)象的類型就可以了。是不是很簡單?呵呵。看一下代碼再說:

CResume類的代碼:

  1. Imports System.IO  

  2.  

  3. Imports System.Runtime.
    Serialization.Formatters  

  4.  

  5. < Serializable()> Public 
    Class CResume   

  6. &lsquo;注意類前面加上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里面可以這樣調(diào)用

  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) 
    &lsquo;依然是AAA  

  9. Debug.WriteLine(Resume1.Address)  

關(guān)于VB.NET中怎么實(shí)現(xiàn)對(duì)象克隆問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

本文題目:VB.NET中怎么實(shí)現(xiàn)對(duì)象克隆
網(wǎng)頁路徑:http://bm7419.com/article26/pdhccg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、面包屑導(dǎo)航全網(wǎng)營銷推廣、用戶體驗(yàn)、、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司