您好,登錄后才能下訂單哦!
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”,理由很簡單。它們指向同一塊內存空間。
VB.NET結構變量的具體操作技巧分享
VB.NET創建新變量技巧分享
VB.NET固定值變量常用創建方法淺談
VB.NET創建數組正確實現方法淺談
VB.NET初始化數組變量實現技巧分享
下面我們重點討論對象的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 ‘注意類前面加上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) ‘依然是AAA Debug.WriteLine(Resume1.Address)
總結:主要調用了VB.NET的流和序列化技術,使得VB.NET對象克隆免去了繁瑣的讀寫操作,也簡化了代碼。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。