偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

VB.NET對(duì)象克隆主要思想

開(kāi)發(fā) 后端
VB.NET對(duì)象克隆可以通過(guò)MemoryStream和BinFormatter來(lái)簡(jiǎn)單的實(shí)現(xiàn)。那么具體的操作方法將會(huì)在這篇文章中為大家詳細(xì)介紹。

VB.NET編程語(yǔ)言中對(duì)對(duì)象的操作是比較重要的一個(gè)操作技巧,對(duì)于一個(gè)具有面向?qū)ο筇匦缘木幊陶Z(yǔ)言,我們要想徹底掌握這一語(yǔ)言的應(yīng)用,就應(yīng)當(dāng)把這些特性把握好。在這里就先來(lái)一起了解一下VB.NET對(duì)象克隆的一些基本概念。

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

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

  1. Dim objA As New CResume ‘Cresume 

是一個(gè)自定義的記錄簡(jiǎn)歷信息的類

然后進(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,比如:

 

  1. objB.Name=”BBB” 

 

而實(shí)際上,objA的Name也變?yōu)?ldquo;BBB”,理由很簡(jiǎn)單。它們指向同一塊內(nèi)存空間。#t#

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

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

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

主要思路:

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

CResume類的代碼:

 

  1. Imports System.IO  
  2. Imports System.Runtime.Serialization.Formatters  
  3. < Serializable()> Public Class CResume   
  4. ‘注意類前面加上Serializable()屬性,否則不可以序列化  
  5. Dim m_Name As String '姓名  
  6. Dim m_Address As String '地址  
  7. Public Property Address() As String  
  8. Get  
  9. Return m_Address  
  10. End Get  
  11. Set(ByVal NewAddress As String)  
  12. m_Address = NewAddress 
  13. End Set  
  14. End Property  
  15. Public Property Name() As String   
  16. Get  
  17. Return m_Name  
  18. End Get  
  19. Set(ByVal NewName As String)  
  20. m_Name = NewName 
  21. End Set  
  22. End Property  
  23. Public Function Clone() As CResume  
  24. Dim BF As New Binary.BinaryFormatter()  
  25. Dim MS As New MemoryStream()  
  26. BF.Serialize(MS, Me)  
  27. MS.Position = 0 
  28. Return (CType(BF.Deserialize(MS), CResume))  
  29. End Function  
  30. End Class 

 

在Form里面可以這樣調(diào)用

 

  1. Dim Resume1 As New CResume()  
  2. Dim Resume2 As New CResume()  
  3. Resume1.Name = "AAA" 
  4. Resume1.Address = "office:smarttags" />Shanghai,China"  
  5. Resume2 = Resume1.Clone()  
  6. Resume1.Name = "BBB" 
  7. Resume1.Address = "Beijing,China" 
  8. Debug.WriteLine(Resume1.Name) ‘依然是AAA  
  9. Debug.WriteLine(Resume1.Address)  

 

總結(jié):主要調(diào)用了VB.NET的流和序列化技術(shù),使得VB.NET對(duì)象克隆免去了繁瑣的讀寫(xiě)操作,也簡(jiǎn)化了代碼。

責(zé)任編輯:曹凱 來(lái)源: wewill.cn
相關(guān)推薦

2010-01-15 16:59:52

VB.NET對(duì)象克隆

2009-10-09 15:59:41

VB.NET對(duì)象

2009-10-14 13:21:46

VB.NET Acco

2009-10-10 17:06:09

VB和VB.NET

2010-01-12 11:47:09

VB.NET可選參數(shù)

2010-01-11 09:33:32

VB.NET對(duì)話框調(diào)用

2009-10-30 11:20:54

VB.NET Proc

2010-01-12 18:05:38

VB.NET對(duì)象

2009-10-13 17:03:55

VB.NET面向?qū)ο?/a>

2009-11-02 16:22:16

VB.NET面向?qū)ο?/a>

2009-10-23 14:06:07

VB.NET類對(duì)象

2009-10-12 16:39:59

OracleTransVB.NET使用

2009-11-03 10:09:48

VB.NET對(duì)象

2010-01-21 12:55:08

VB.NET對(duì)象序列

2010-01-19 15:08:18

VB.NET對(duì)象成員

2010-01-13 11:18:24

VB.NET面向?qū)ο?/a>

2010-01-21 16:17:32

VB.NET文件對(duì)象

2009-10-20 17:38:20

VB.NET exce

2009-11-03 13:33:39

VB.NET對(duì)象列表

2009-10-12 16:51:28

VB.NET使用Ora
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)