Enums in Visual Basic .NET
Our enum type ServerState
has an underlying int
type.
The possible values for ServerState
are defined as constants. The special feature Enum
generates successive constant values automatically; in this case 0, 1, 2 and so on.
By implementing the ToString
method, values of ServerState
can be printed out or converted to strings.
If we have a value of type Integer
, we cannot pass it to Transition
- the compiler will complain about type mismatch. This provides some degree of compile-time type safety for enums.
Transition emulates a state transition for a server; it takes the existing state and returns a new state.
Module Enums
Enum ServerState
StateIdle = 0
StateConnected
StateError
StateRetrying
End Enum
Dim stateName As New Dictionary(Of ServerState, String) From {
{ServerState.StateIdle, "idle"},
{ServerState.StateConnected, "connected"},
{ServerState.StateError, "error"},
{ServerState.StateRetrying, "retrying"}
}
Function ServerStateToString(ByVal ss As ServerState) As String
Return stateName(ss)
End Function
Sub Main()
Dim ns As ServerState = Transition(ServerState.StateIdle)
Console.WriteLine(ServerStateToString(ns))
Dim ns2 As ServerState = Transition(ns)
Console.WriteLine(ServerStateToString(ns2))
End Sub
Function Transition(ByVal s As ServerState) As ServerState
Select Case s
Case ServerState.StateIdle
Return ServerState.StateConnected
Case ServerState.StateConnected, ServerState.StateRetrying
' Suppose we check some predicates here to determine the next state...
Return ServerState.StateIdle
Case ServerState.StateError
Return ServerState.StateError
Case Else
Throw New ArgumentException("unknown state: " & s.ToString())
End Select
End Function
End Module
To run the program, put the code in Enums.vb
and use vbc
to compile it.
$ vbc Enums.vb
$ Enums.exe
connected
idle
This example illustrates the use of enums by creating a simple state transition mechanism for a server. By defining an enum type and using a Dictionary
to map enum values to strings, we can easily print out meaningful representations of the states.