.NET 枚举类型详解
.NET 枚举类型的概述
引言
本文旨在介绍 .NET 枚举类型。
背景
代码可读性是衡量源代码质量的重要因素。代码越容易理解,就越容易维护。你是否曾经使用数字来表示一系列变量值?例如
Dim CalculationOperation As Integer = 0
CalculationOperation = _ GetOperation ()
Select Case CalculationOperation
Case 1 ’ Addition
_PerformAddition()
Case 2 ‘ Subtraction
_PerformSubtraction()
Case 3 ‘ Multiplication
_PerformMultiplication()
End Select
这要求你以及可能接触你代码的任何其他开发人员记住所有表示颜色的可能的数值。这可能成为维护噩梦!为了解决这个问题,VB.NET 提供了枚举类型。
使用枚举类型的理由
可读性
来自维基百科
“在计算机编程中,枚举类型(也称为枚举或
enum
)是一种数据类型,由一组名为元素、成员或枚举器的值组成。枚举器名称通常是语言中的常量标识符。”
枚举类型允许你为一系列整数值赋予英文描述。也许一个例子可以解释这一点。
Public Type CalculatorOperations
Addition = 1
Subtraction = 2
Multiplication = 3
End Type
Dim Operation As CalculatorOperations
Operation = _ GetOperation ()
Select Case Operation
Case CalculatorOperations.Addition
_PerformAddition()
Case CalculatorOperations.Subtraction
_PerformSubtraction()
Case CalculatorOperations.Multiplication
_PerformMultiplication()
End Select
这个例程更容易阅读。
在编写例程时,请务必考虑表示除数字本身以外的值的数字字面量,作为创建枚举类型的可能原因。
枚举作为例程参数
枚举类型非常适合作为例程参数。考虑以下示例。
糟糕的示例
Dim ApplicationState as Integer = 5 ‘lets say five stands for Fatal Crash!
Sub _SetApplicationState(ByVal State As Integer)
好的示例
Dim ApplicationState As AppState = AppState.FatalCrash
Sub _SetApplicationState(ByVal State As AppState)
如果你正在使用 Visual Studio,那么你无疑已经注意到将枚举类型作为函数参数的好处。在编写调用例程的代码时,IntelliSense 会向你显示枚举类型的所有可用成员。
编译器类型检查
使用枚举类型还可以提供编译器的类型检查。考虑以下代码块
‘Valid color values are 0 – 9
Dim CurrentColor As Integer
CurrentColor = 12 ‘invalid color
这在使用枚举类型时是不可能的。枚举类型可以提供强大的返回值。考虑以下代码
Dim LoginResult As Boolean = false
LoginResult = _AttemptLogin()
If LoginResult = True Then
_Authenticateuser()
End If
If LoginResult = False Then
_InitiateLogin()
End If
如你所见,true
和 false
允许两种条件
Dim LoginResult As AuthResult
LoginResult = _AttemptLogin()
If LoginResult = AuthResult.Authenticated Then
_Authenticateuser()
End If
If LoginResult = AuthResult.Failed Then
_InitiateLogin()
End If
If LoginResult = AuthResult.Suspended Then
_AlertSuspended()
End If
If LoginResult = AuthResult.AuthenticatedChangePassword Then
_InitiatePasswordChange()
_AuthenticateUser()
End If
你是否看到了可能性?
将第一个和最后一个条目定义为循环限制
你可能会遇到需要迭代枚举类型中每个成员的情况。一种建议的做法是保留第一个和最后一个元素作为循环限制。
Public Type RGBValue
RGB_FirstValue = 0
RGB_Red = 0
RGB_Green = 1
RGB_Blue = 2
RGB_LastValue = 2
End Type
Dim RGBVal As RGBValue
For RGBVal = RGBValue.RGB_FirstValue To RGBValue.RGB_LastValue
‘process here
Next
结论
好吧,我希望我已经说明了使用枚举类型的一些好处。欢迎提出所有反馈。
谢谢,
Bryan James
MCP, MCAD, MCSD.NET
http://www.bytepushers.com
http://www.twitter.com/budbjames
历史
版本 1 2010/3/7