熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

VB.NET中對象的克隆[1]

2013-11-13 12:15:18  來源: .NET編程 

  在DMAX裡面做好一個物體(父物體)以後可以選擇Edit菜單中的Clone下面有三中選項Copy(生成一個同模樣的子物體兩者的操作互不影響)Instance(父子互動父物體的操作同樣影響子物體子物體也一樣)還有一個Reference(暫不考慮)

    在VBNET同樣會碰到這樣的問題創建一個復雜對象(可能有很多種不同的數據類型)的實例進行了一系列操作之後想讓一個中間變量或幾個(另外的實例)保存它的狀態我們一般采取逐個變量賦值有時候會寫很長的代碼)這實際上就是上述的Copy問題而對於Instance很簡單新建一個實例指向一下就可以了

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

  然後進行初始化比如

    objAName=AAA

    objAAddress=ShanghaiChina

    ……

    Dim objB As New CResume 新建一個實例

    objB=objA

  這樣的話objB跟objA有相同狀態值得注意的是objB改變一個Name比如

    objBName=BBB

  而實際上objA的Name也變為BBB理由很簡單它們指向同一塊內存空間

  下面我們重點討論對象的Clone問題即Copy以後的各個對象互不影響關鍵是如何采用簡單的方法解決我們的問題MemoryStream和BinFormatter配合一下可以很簡單的把對象克隆

  MemoryStream我以前提到過是支持存儲區為內存的流

  BinFormatter主要以二進制形式序列化和反序列化對象

  主要思路

  先用BinFormatter的Serialize方法把對象存儲在MemoryStream流中(操作跟其他Stream一樣)然後Deserialize反序列化得到一個流式的數據轉化為原來對象的類型就可以了是不是很簡單?呵呵看一下代碼再說

  CResume類的代碼

  Imports SystemIO

  Imports SystemRuntimeSerializationFormatters

  <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

[]  []  


From:http://tw.wingwit.com/Article/program/net/201311/15510.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.