成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

探討.NET中的聯(lián)合結(jié)構(gòu)

開發(fā) 后端
本文介紹的是.NET中的聯(lián)合結(jié)構(gòu),希望對(duì)你有幫助,一起來看。

關(guān)于.NET中的聯(lián)合結(jié)構(gòu),我們也探討過。下面介紹.NET中的聯(lián)合結(jié)構(gòu)。

在進(jìn)行某些算法的C語言編程的時(shí)候,需要使幾種不同類型的變量存放到同一段內(nèi)存單元中。也就是使用覆蓋技術(shù),幾個(gè)變量互相覆蓋。這種幾個(gè)不同的變量共同占用一段內(nèi)存的結(jié)構(gòu),在C語言中,被稱作“共用體”類型結(jié)構(gòu),簡(jiǎn)稱共用體,也叫聯(lián)合體
在C++中有一種類型叫做聯(lián)合體(也叫共用體),它的關(guān)鍵字為union,在使用上與結(jié)構(gòu)struct非常相似,可以包含任何的結(jié)構(gòu)類型數(shù)據(jù),但它又有一個(gè)非常獨(dú)特的特性,那就是所有的數(shù)據(jù)都指向一個(gè)地址。

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

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

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

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

讓我們看看如何將下面的C++聯(lián)合體代碼轉(zhuǎn)換為一個(gè)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ù) www.liuhebao.com   
  5. int i; //四字節(jié)整數(shù)   
  6. }  

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

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

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

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

這就是在.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í),其他的數(shù)據(jù)也會(huì)隨著內(nèi)存的變化而變化。

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

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

  1. <StructLayout(LayoutKind.Explicit)> _   
  2. Structure MyUnion2 www.jokedu.com   
  3. <FieldOffset(0)> Dim b1 As Byte   
  4. <FieldOffset(1)> Dim b2 As Byte   
  5. <FieldOffset(2)> Dim b3 As Byte   
  6. <FieldOffset(3)> Dim b4 As Byte   
  7. <FieldOffset(0)> Dim i As Integer   
  8. <FieldOffset(0)> Dim ui As UInteger   
  9. End Structure  

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

測(cè)試代碼:

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))) 
  6. 'FF FF FF FF   
  7. MsgBox(MU.i & " : " & MU.ui) '-1 : 4294967295  

希望通過本文對(duì).net中聯(lián)合結(jié)構(gòu)的介紹,能夠給你帶來幫助。

責(zé)任編輯:于鐵 來源: 博客園
相關(guān)推薦

2011-06-11 22:09:06

NET聯(lián)合體

2010-06-18 09:23:33

SortedSet.NET 4

2009-07-28 09:42:22

.NET數(shù)據(jù)訪問層

2010-07-12 09:07:30

C#

2011-03-16 08:59:29

.NET強(qiáng)名稱

2009-08-13 16:57:37

.NET緩存機(jī)制

2010-09-08 09:49:28

藍(lán)牙協(xié)議棧

2009-03-13 09:31:03

.NET整合分布式應(yīng)用

2009-05-11 13:48:00

ASP.NET 2.0緩存效率

2010-01-19 18:24:29

VB.NET調(diào)用Win

2010-04-16 16:41:53

rownum用法

2009-07-30 13:07:49

ASP.NET中的三層

2024-01-26 06:42:05

Redis數(shù)據(jù)結(jié)構(gòu)

2009-11-04 11:32:20

VB.NET回調(diào)函數(shù)

2022-01-12 08:30:55

結(jié)構(gòu)體指針STM32

2009-10-30 16:31:55

VB.NET重載方法

2010-02-01 10:30:13

Python世界

2020-05-08 16:09:23

索引B+樹存儲(chǔ)

2009-07-30 13:30:56

ASP.NET開發(fā)模式

2009-12-28 15:11:36

ADO.NET專家
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 亚洲欧美第一视频 | 在线观看免费av网 | 久久久精品一区二区三区 | 色在线免费视频 | 久久美女视频 | 亚洲精品女人久久久 | 国产精品视频一区二区三区不卡 | 毛片站| 久久精品一级 | 久久亚洲一区二区 | 亚洲福利一区二区 | 日韩久草 | 欧美一级毛片在线播放 | 日本精品一区二区三区在线观看视频 | 爱综合| 国产成人高清视频 | 国产在线网址 | 欧美日韩看片 | 亚洲精品一区国产精品 | 岛国视频 | 成人小视频在线观看 | 成人在线免费网站 | 久久精品国产久精国产 | 国产精品美女一区二区 | 一区免费| 中文字幕视频在线免费 | 爱爱综合网 | 欧美aⅴ | 中文字幕国产 | 综合久久99 | 狠狠草视频 | www.黄色片视频 | 久久岛国 | 欧美自拍一区 | 久久香焦 | 91影视 | 久久久久久国 | 午夜精品一区二区三区在线观看 | 欧美精品三区 | 国产免费观看视频 | 亚州影院 |