VB.NET中怎么實現(xiàn)對象克隆,針對這個問題,這篇文章詳細介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
成都創(chuàng)新互聯(lián)自2013年起,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目成都網(wǎng)站制作、成都網(wǎng)站設(shè)計、外貿(mào)營銷網(wǎng)站建設(shè)網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元梅江做網(wǎng)站,已為上家服務(wù),為梅江各地企業(yè)和個人服務(wù),聯(lián)系電話:13518219792
在3DMAX里面,做好一個物體(父物體)以后,可以選擇Edit菜單中的Clone,下面有三中選項:Copy(生成一個同模樣的子物體,兩者的操作互不影響),Instance(父子互動,父物體的操作同樣影響子物體,子物體也一樣),還有一個Reference(暫不考慮)。
在VB.NET,同樣會碰到這樣的問題。創(chuàng)建一個復(fù)雜對象(可能有很多種不同的數(shù)據(jù)類型)的實例,進行了一系列操作之后,想讓一個中間變量或幾個(另外的實例)保存它的狀態(tài),我們一般采取逐個變量賦值,有時候會寫很長的代碼:)這實際上就是上述的Copy問題。而對于Instance,很簡單,新建一個實例,指向一下就可以了:
Dim objA As New CResume ‘Cresume是一個自定義的記錄簡歷信息的類
然后進行初始化,比如:
objA.Name=”AAA”
objA.Address=”Shanghai,
China”……
Dim objB As New CResume
‘新建一個實例objB=objA
這樣的話,objB跟objA有相同狀態(tài),值得注意的是objB改變一個Name,比如:
objB.Name=”BBB”
而實際上,objA的Name也變?yōu)椤癇BB”,理由很簡單。它們指向同一塊內(nèi)存空間。
如何正確實現(xiàn)VB.NET重載Windows控件
VB.NET調(diào)用DLL實現(xiàn)方法解析
VB.NET讀寫文本文件具體代碼編寫方式介紹
VB.NET對象存儲各種方法簡介
VB.NET集合存儲內(nèi)容解析
下面我們重點討論對象的Clone問題,即Copy以后的各個對象互不影響,關(guān)鍵是如何采用簡單的方法解決我們的問題,MemoryStream和BinFormatter配合一下可以很簡單的把VB.NET對象克隆。
MemoryStream,我以前提到過,是支持存儲區(qū)為內(nèi)存的流。
BinFormatter,主要以二進制形式序列化和反序列化對象。
主要思路:
先用BinFormatter的Serialize方法,把對象存儲在MemoryStream流中,(操作跟其他Stream一樣),然后Deserialize反序列化,得到一個流式的數(shù)據(jù),轉(zhuǎn)化為原來對象的類型就可以了。是不是很簡單?呵呵。看一下代碼再說:
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里面可以這樣調(diào)用
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)
‘依然是AAADebug.WriteLine(Resume1.Address)
關(guān)于VB.NET中怎么實現(xiàn)對象克隆問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。
本文題目:VB.NET中怎么實現(xiàn)對象克隆
網(wǎng)頁路徑:http://vcdvsql.cn/article26/pdhccg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)、面包屑導(dǎo)航、全網(wǎng)營銷推廣、用戶體驗、、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)