日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
探討.NET中的聯(lián)合結(jié)構(gòu)

在C++中有一種類型叫做聯(lián)合體(也叫共用體),它的關(guān)鍵字為union,在使用上與結(jié)構(gòu)struct非常相似,可以包含任何的結(jié)構(gòu)類型數(shù)據(jù),但它又有一個非常獨特的特性,那就是所有的數(shù)據(jù)都指向一個地址。

棗莊網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、自適應(yīng)網(wǎng)站建設(shè)等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)于2013年開始到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。

這個意思你可以理解為:聯(lián)合體中的所有數(shù)據(jù)都是引用一個內(nèi)存塊中相同地址的數(shù)據(jù),當(dāng)我們改變這個聯(lián)合體內(nèi)任何一種數(shù)據(jù)的值時,其他的數(shù)據(jù)的值都會隨之改變。

這對于未知類型的數(shù)據(jù)非常有效,你可以使用聯(lián)合體裝載一個數(shù)據(jù),然后分析其數(shù)據(jù)是否有效,或者可以對某些特殊的類型進行位運算,獲取其特殊位置的數(shù)值。

但在VB.NET或C#中,根本沒有union關(guān)鍵字讓我們聲名聯(lián)合體,但該怎么做才能聲名聯(lián)合體呢?

這需要用到結(jié)構(gòu)屬性!

讓我們看看如何將下面的C++聯(lián)合體代碼轉(zhuǎn)換為一個VB.NET的聯(lián)合結(jié)構(gòu)吧!

 
 
 
  1. union myunion  
  2. {  
  3. char b; //單字節(jié)整數(shù),在c語言中用char類型來表示單字節(jié)整數(shù)  
  4. short s; //雙字節(jié)整數(shù)  
  5. int i; //四字節(jié)整數(shù)  
  6. }  

這個聯(lián)合體大小為4個字節(jié),其各個數(shù)據(jù)分別表示為單字節(jié)、雙字節(jié)、四字節(jié)的整數(shù),在運行期間其任何數(shù)據(jù)的改變都會影響其他數(shù)據(jù)。

 
 
 
  1. Improts System.Runtime.InteropServices '引入運行時非托管數(shù)據(jù)管理服務(wù) 

引入結(jié)構(gòu)屬性,精確控制結(jié)構(gòu)中元素的位置

 
 
 
  1.  _  
  2. Structure MyUnion  
  3. ' 設(shè)置字段的偏移值,設(shè)為0即可  
  4.  Dim b As Byte '單字節(jié)整數(shù)  
  5.  Dim s As Short '雙字節(jié)整數(shù)  
  6.  Dim i As Integer '四字節(jié)整數(shù)  
  7. End Structure  

這就是在.NET中設(shè)置聯(lián)合結(jié)構(gòu)的方法,C#中于VB.NET中的設(shè)置方法雷同,這里就不做贅述了。

下面來介紹聯(lián)合體的特性應(yīng)用,就以上面我們剛才聲名的聯(lián)合體結(jié)構(gòu)為例,下面的代碼將為我們演示聯(lián)合體的特性:

 
 
 
  1. Dim MU As New MyUnion  
  2. MsgBox(String.Format("{0} {1} {2}", MU.b, MU.s, MU.i)) '0 0 0  
  3. MU.s = Int16.MaxValue  
  4. MsgBox(String.Format("{0} {1} {2}", MU.b, MU.s, MU.i)) '255 32767 32767  
  5. MU.b = 12  
  6. MsgBox(String.Format("{0} {1} {2}", MU.b, MU.s, MU.i)) '12 32524 32524  
  7. MU.i = 0  
  8. MsgBox(String.Format("{0} {1} {2}", MU.b, MU.s, MU.i)) '0 0 0  

上面的代碼可以更直觀地顯示數(shù)據(jù)在內(nèi)存中的變化,每當(dāng)改變聯(lián)合數(shù)據(jù)時,其他的數(shù)據(jù)也會隨著內(nèi)存的變化而變化。

當(dāng)然,使用聯(lián)合體也有限制,那就是.NET的聯(lián)合體只適用于值類型,無法應(yīng)用在引用類型和指針中,你無法設(shè)置字符串(String)或是數(shù)組進入聯(lián)合類型,這一點需要非常的注意!

當(dāng)然,.NEt中的聯(lián)合結(jié)構(gòu)體并不只有上面的用法,你可以發(fā)揮自己的想象力,比如可以:

 
 
 
  1.  _  
  2. Structure MyUnion2  
  3.  Dim b1 As Byte 
  4.  Dim b2 As Byte 
  5.  Dim b3 As Byte 
  6.  Dim b4 As Byte 
  7.  Dim i As Integer 
  8.  Dim ui As UInteger  
  9. End Structure  

這個結(jié)構(gòu)可以獲取一個有或無符號的四個字節(jié)整數(shù)每一個字節(jié)的數(shù)據(jù),而不需要自己寫算法來分析了。

測試代碼:

Code:

 
 
 
  1. Dim MU As MyUnion2  
  2. MsgBox(MU.i & " : " & MU.ui) '0 : 0  
  3. MsgBox(String.Format("{0} {1} {2} {3}", Hex(MU.b1), Hex(MU.b2), Hex(MU.b3), Hex(MU.b4))) '0 0 0 0  
  4. MU.b1 = 255 : MU.b2 = 255 : MU.b3 = 255 : MU.b4 = 255  
  5. MsgBox(String.Format("{0} {1} {2} {3}", Hex(MU.b1), Hex(MU.b2), Hex(MU.b3), Hex(MU.b4))) 'FF FF FF FF  
  6. MsgBox(MU.i & " : " & MU.ui) '-1 : 4294967295 

新聞標題:探討.NET中的聯(lián)合結(jié)構(gòu)
文章來源:http://www.5511xx.com/article/cooshpg.html