ZetCode

FreeBasic Enum 关键字

最后修改日期:2025 年 6 月 16 日

FreeBasic 的 Enum 关键字定义了一个枚举类型,其中包含一组命名常量。枚举通过用有意义的名称替换魔术数字来提高代码的可读性。

基本定义

在 FreeBasic 中,Enum 创建了一个由命名整数常量组成的新类型。枚举中的每个常量都有一个底层的整数值。

默认情况下,第一个枚举值的 0,后续每个枚举值递增 1。您可以显式地为枚举值分配值。枚举提高了代码的清晰度和可维护性。

简单的枚举声明

本示例展示了一个基本的枚举声明和用法。

enum_simple.bas
Enum Days
    Sunday
    Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
End Enum

Dim today As Days = Wednesday
Print "Today is day number: "; today

这里我们定义了一个 Days 枚举,其中包含七个表示工作日日的常量。第一个值 (Sunday) 为 0,Monday 为 1,依此类推。我们声明一个 Days 类型的变量并打印其数值。

带有显式值的枚举

您可以为枚举常量分配特定值。

enum_explicit.bas
Enum HttpStatus
    OK = 200
    Created = 201
    Accepted = 202
    BadRequest = 400
    Unauthorized = 401
    NotFound = 404
End Enum

Dim response As HttpStatus = NotFound
Print "HTTP Status: "; response

此枚举定义了常见的 HTTP 状态码及其标准数值。我们将 NotFound 值赋给一个变量并打印它。使用命名常量比使用原始数字使代码更易于理解。

带位标志的枚举

枚举可用于创建位标志以组合选项。

enum_flags.bas
Enum FilePermissions
    Read = 1
    Write = 2
    Execute = 4
End Enum

Dim myPermissions As FilePermissions = Read Or Write

If (myPermissions And Read) = Read Then
    Print "Read permission granted"
End If

本示例展示了如何使用枚举进行按位运算。每个权限都是 2 的幂,允许使用 OR 运算进行组合。我们使用 AND 运算检查特定权限。这在系统编程中很常见。

Switch 语句中的枚举

枚举与 Select Case 语句配合使用效果很好,可以实现清晰的分支。

enum_switch.bas
Enum TrafficLight
    Red
    Yellow
    Green
End Enum

Dim light As TrafficLight = Yellow

Select Case light
    Case Red
        Print "Stop"
    Case Yellow
        Print "Caution"
    Case Green
        Print "Go"
End Select

我们定义了一个交通信号灯枚举并在 Select Case 语句中使用它。代码变得非常易读,因为每个 case 都清晰地描述了每个灯光状态的操作。枚举消除了这种逻辑中的魔术数字。

带有自定义基类型的枚举

FreeBasic 允许指定枚举的底层类型。

enum_type.bas
Enum SmallEnum As Byte
    Value1
    Value2
    Value3
End Enum

Enum LargeEnum As Integer
    BigValue1 = 100000
    BigValue2
    BigValue3
End Enum

Print "Size of SmallEnum: "; SizeOf(SmallEnum)
Print "Size of LargeEnum: "; SizeOf(LargeEnum)

在这里,我们声明了两个具有不同底层类型的枚举。SmallEnum 使用 Byte(1 字节),而 LargeEnum 使用 Integer(4 字节)。这对于内存优化或需要更大枚举值时很有用。

将枚举用作函数参数

枚举可以用作函数参数以实现类型安全。

enum_function.bas
Enum LogLevel
    Debug
    Info
    Warning
    [Error]
    Critical
End Enum

Sub LogMessage(level As LogLevel, message As String)
    Print "["; level; "] "; message
End Sub

LogMessage(Info, "Application started")
LogMessage([Error], "File not found")

本示例演示了如何将枚举用作函数参数。LogMessage 函数接受一个 LogLevel 枚举,确保只能传递有效的日志级别。请注意 Error 周围的括号,因为它是一个 FreeBasic 关键字。

带方法的枚举

可以使用 Extends 关键字用方法扩展枚举。

enum_methods.bas
Enum Colors
    Red
    Green
    Blue
End Enum

Function Colors.ToString(c As Colors) As String
    Select Case c
        Case Red: Return "Red"
        Case Green: Return "Green"
        Case Blue: Return "Blue"
    End Select
End Function

Dim favorite As Colors = Green
Print "Favorite color: "; Colors.ToString(favorite)

在这里,我们用 ToString 方法扩展了 Colors 枚举。这允许将枚举值转换为人类可读的字符串。调用方法时使用枚举类型名称后跟方法名称。

最佳实践

本教程通过实用的示例介绍了 FreeBasic 的 Enum 关键字,展示了它在不同场景下的用法。

作者

我的名字是 Jan Bodnar,我是一名充满激情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出所有 FreeBasic 教程