Flag 类
提供应用程序状态标志位的集中处理
说明 Introduction
按位(十六进制)的形式存储应用程序标志位数据。
在应用程序的运行过程中,经常要处理各种状态。也会使用一定的枚举类型或数值类型来描述应用程序的当前运行状态。在结束应用程序运行或需要将当前状态进行记录时,需要对所有的状态进行存储(本地或数据服务器)。在再次开启应用程序时需要加载其状态。这就需要一个集中处理状态的数据类来进行收集工作。
示例
假设某程序需要处理以下四种枚举状态
Public Enum UserGender
Female = 0
Male = 1
End Enum
Public Enum UserType
Guest = 0
Staff = 1
Boss = 2
End Enum
Public Enum AccessZone
Beijing = 0
Tianjin = 1
Shanghai = 2
Chongqing = 3
End Enum
Public Enum DelayType
None = 0
LowDelay = 1
HighDelay = 2
End Enum
Dim objUserGender As UserGender
Dim objUserType As UserType
Dim objAccessZone As AccessZone
Dim objDelayType As DelayType
' 收集
Dim objFlag As New Flag
objFlag.Bit1 = objUserGender
objFlag.Bit2 = objUserType
objFlag.Bit3 = objAccessZone
objFlag.Bit4 = objDelayType
' 存储
Dim i As UShort = objFlag.ToUShort()
Dim s As String = objFlag.ToString()
' 调用
Dim objNewFlag As New Flag(i)
' 或者
Dim objNewFlag As Flag = Flag.Parse(s)
' 使用(隐式类型转换)
dim objNewUserGender As UserGender = objNewFlag.Bit1
核心代码如下
Visual Basic .Net Code
Public Class Flag
Public _Flag As UShort
Public Property Bit1 As Byte
Get
Return _Flag >> 12
End Get
Set(value As Byte)
If value > &HF Then
_Flag = (_Flag And &HFFF) Or &HF000
Else
_Flag = (_Flag And &HFFF) Or (CUShort(value) << 12)
End If
End Set
End Property
Public Property Bit2 As Byte
Get
Return (_Flag And &HF00) >> 8
End Get
Set(value As Byte)
If value > &HF Then
_Flag = (_Flag And &HF0FF) Or &HF00
Else
_Flag = (_Flag And &HF0FF) Or (CUShort(value) << 8)
End If
End Set
End Property
Public Property Bit3 As Byte
Get
Return (_Flag And &HF0) >> 4
End Get
Set(value As Byte)
If value > &HF Then
_Flag = (_Flag And &HFF0F) Or &HF0
Else
_Flag = (_Flag And &HFF0F) Or (CUShort(value) << 4)
End If
End Set
End Property
Public Property Bit4 As Byte
Get
Return _Flag And &HF
End Get
Set(value As Byte)
If value > &HF Then
_Flag = (_Flag And &HFFF0) Or &HF
Else
_Flag = (_Flag And &HFFF0) Or value
End If
End Set
End Property
Public Sub New()
_Flag = 0
End Sub
Public Sub New(Value As UShort)
_Flag = Value
End Sub
Public Shared Function Parse(Value As String) As Flag
Dim _objFlag As Flag = New Flag(Val("&H" & Value))
Return _objFlag
End Function
Public Overrides Function ToString() As String
Return _Flag.ToString("X4")
End Function
Public Function ToUShort() As UShort
Return _Flag
End Function
End Class