VB.NET中對象的克隆

發表于:2008-04-10來源:作者:點擊數: 標簽:
在3DMAX里面,做好一個物體(父物體)以后,可以選擇Edit菜單中的Clone,下面有三中選項:Copy(生成一個同模樣的子物體,兩者的操作互不影響),Instance(父子互動,父物體的操作同樣影響子物體,子物體也一樣),還有一個Reference(暫不考慮)。 在 VB .N
在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”,理由很簡單。它們指向同一塊內存空間。

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

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

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

  主要思路:

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

  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

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97