In VB.NET you can create what in C is called a
union, i.e. a particular structure where you can access the same memory with different names. Here's how you declare such a structure by using the StructLayout attribute, and specifying that you want to define the structure layout explicitly, namely how the fields will be saved in memory within the type.
<StructLayout(LayoutKind.Explicit)> Structure ARGBColor
<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
If you set the Value field, you're actually setting all the 4 bytes of the structure in a single step. Otherwise you can get and set the single bytes of the structure with the other fields. Here's how you can set the Value field of a variable of type ARGBColor to an hexadecimal value that represents a color, and then read the other fields to retrieve its RGB components:
' Split a color into its components.
Dim rgb As ARGBColor
rgb.Value = &H112233 ' This is equal to 1122867.
Console.WriteLine(String.Format("Red={0}, Green={1}, Blue={2}", rgb.Red, _
rgb.Green, rgb.Blue))
' => Red=51, Green=34, Blue=17
--------------------------
Note: this code is taken from Francesco Balena's
Programming Microsoft Visual Basic .NET book (MS Press 2002)