明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

VB.NET特征之FieldOffset特征

[摘要]VB.NET特性 -----FieldOffset特性 在選擇顯示布局的時候,結(jié)構(gòu)中的所有變量的定義必須包含F(xiàn)ieldOffset特性。這個特性指定了距結(jié)構(gòu)開始處的距離(以字節(jié)位單位)。 Imports System...
VB.NET特性

-----FieldOffset特性





在選擇顯示布局的時候,結(jié)構(gòu)中的所有變量的定義必須包含F(xiàn)ieldOffset特性。這個特性指定了距結(jié)構(gòu)開始處的距離(以字節(jié)位單位)。



Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Explicit)> _

Structure test

<FieldOffset(0)>Dim Red as Byte

<FieldOffset(1)>Dim Green as Byte

<FieldOffset(2)>Dim Blue as Byte

<FieldOffset(3)>Dim Alpha as Byte

End Structure



StructLayout特性與FieldOffset特性可以實現(xiàn)聯(lián)合(union)。聯(lián)合(union)已經(jīng)被多種語言(如 c和c++)采用,但是vb卻不具備這一語言特性。聯(lián)合(union)是一種可以使得結(jié)構(gòu)中的兩個或多個元素在內(nèi)存中重疊,以及使用不同的名稱來指示同一內(nèi)存位置。



在.NET中,聯(lián)合(union)的關(guān)鍵在于支持顯示結(jié)構(gòu)布局。



如:

Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Explicit)> _

Structure test

<FieldOffset(0)>Dim Red as Byte

<FieldOffset(1)>Dim Green as Byte

<FieldOffset(2)>Dim Blue as Byte

<FieldOffset(3)>Dim Alpha as Byte

<FieldOffset(0)>Dim Value as Integer

End Structure



則這些元素在內(nèi)存中的位置,如圖:






這樣就可以通過Value 字段將4個字節(jié)作為一個整體進(jìn)行訪問。



'拆分

Dim rgb as test

rgb.Value=&H112233 '1122867

Console.Write("Red={0},Green={1},Blue={2}",rgb.Red,rgb.Green,rgb.Blue)



輸出如:








‘合并

rgb.Red=51

rgb.Green=34

rgb.Blue=17

Console.Write(rgb.Value)

輸出如:










這樣就可以解決很多轉(zhuǎn)換的工作,而且比使用數(shù)學(xué)運算符更快!