共用方式為


列舉語句 (Visual Basic)

宣告列舉並定義其成員的值。

語法

[ <attributelist> ] [ accessmodifier ]  [ Shadows ]
Enum enumerationname [ As datatype ]
   memberlist
End Enum

組件

  • attributelist

    選擇性。 套用至此列舉的屬性清單。 您必須以角括弧 (“” 和 “<”) 括住>

    屬性 FlagsAttribute 表示列舉實例的值可以包含多個列舉成員,而且每個成員都代表列舉值中的位字段。

  • accessmodifier

    選擇性。 指定哪些程式代碼可以存取此列舉。 可以是下列其中一項:

  • Shadows

    選擇性。 指定這個列舉會重新宣告,並在基類中隱藏同名的程式設計專案或一組多載專案。 您只能在列舉本身上指定 Shadows ,而不是在其任何成員上。

  • enumerationname

    必須的。 列舉的名稱。 如需有效名稱的資訊,請參閱 宣告項目名稱

  • datatype

    選擇性。 列舉及其所有成員的數據類型。

  • memberlist

    必須的。 在此語句中宣告的成員常數清單。 多個成員會出現在個別的原始程式碼行上。

    每個 member 都有下列語法和元件: [<attribute list>] membername [ = initializer ]

    部分 說明
    membername 必須的。 這個成員的名稱。
    initializer 選擇性。 在編譯階段評估並指派給這個成員的表達式。
  • End Enum

    終止 區塊 Enum

備註

如果您有一組邏輯上彼此相關的未變更值,您可以在列舉中一起定義這些值。 這會為列舉及其成員提供有意義的名稱,這比其值更容易記住。 接著,您可以在程式代碼的許多位置使用 列舉成員。

使用列舉的優點包括:

  • 減少因轉置或輸入錯誤數字而造成的錯誤。

  • 可讓您在日後輕鬆變更值。

  • 讓程式代碼更容易閱讀,這表示將引入錯誤的可能性較小。

  • 確保向前相容性。 如果您使用列舉,如果未來有人變更與成員名稱對應的值,則程式代碼不太可能失敗。

列舉具有名稱、基礎數據類型和一組成員。 每個成員都代表常數。

在類別、結構、模組或介面層級宣告的列舉,在任何程式之外,都是 成員列舉。 它是宣告類別、結構、模組或介面的成員。

您可以從其類別、結構、模組或介面中的任何位置存取成員列舉。 類別、結構或模組以外的程式代碼必須以該類別、結構或模組的名稱限定成員列舉的名稱。 您可以將 Imports 語句新增至原始程式檔,以避免需要使用完整名稱。

在命名空間層級宣告的列舉,在任何類別、結構、模組或介面之外,都是其出現的命名空間成員。

列舉的 宣告內容 必須是來源檔案、命名空間、類別、結構、模組或介面,而且不能是程式。 如需詳細資訊,請參閱 宣告內容和預設存取層級

您可以將屬性套用至整體列舉,但不能個別套用至其成員。 屬性會提供元件元數據的資訊。

數據類型

語句 Enum 可以宣告列舉的數據類型。 每個成員都會採用列舉的數據類型。 您可以指定 ByteInteger、、、LongSByteShortUIntegerULong、 或 UShort

如果您未指定 datatype 列舉,則每個成員都會採用其 initializer的數據類型。 如果您同時 datatype 指定和 initializer,則的 initializer 資料類型必須可轉換成 datatype。 如果 和 都不存在datatype,數據類型會預設為 initializerInteger

初始化成員

Enum語句可以初始化 中memberlist所選成員的內容。 您可以使用 initializer 來提供要指派給成員的表達式。

如果您未initializer指定成員,Visual Basic 會將它初始化為零(如果它是中的member第一memberlist個 ),或的值大於前member一個 的值。

每個 initializer 中提供的表達式可以是常值的任何組合、已定義的其他常數,以及已經定義的列舉成員,包括這個列舉的先前成員。 您可以使用算術和邏輯運算子來結合這類元素。

您無法在 中使用 initializer變數或函式。 不過,您可以使用 轉換關鍵字,例如 CByteCShort。 如果您以常數AscWString自變數呼叫它,您也可以使用 Char ,因為您可以在編譯時期加以評估。

列舉不能有浮點值。 如果成員已指派浮點值,且 Option Strict 設定為 on,則會發生編譯程式錯誤。 如果 Option Strict 為 off,則值會自動轉換成 Enum 類型。

如果成員的值超過基礎數據類型的允許範圍,或者如果您將任何成員初始化為基礎數據類型所允許的最大值,編譯程式就會報告錯誤。

修飾 符

類別、結構、模組和介面成員列舉預設為公用存取。 您可以使用存取修飾詞來調整其存取層級。 命名空間成員列舉預設為friend存取。 您可以將其存取層級調整為公用,但不能調整為私人或受保護。 如需詳細資訊,請參閱 Visual Basic中的存取層級

所有列舉成員都有公用存取權,而且您無法在它們上使用任何存取修飾詞。 不過,如果列舉本身具有較受限制的存取層級,則指定的列舉存取層級優先。

根據預設,所有列舉都是類型,而且其欄位是常數。 因此, Shared宣告列舉或其成員時,無法使用、 StaticReadOnly 關鍵詞。

指派多個值

列舉通常代表互斥值。 FlagsAttribute藉由在宣告中包含 Enum 屬性,您可以改為將多個值指派給 列舉的實例。 屬性 FlagsAttribute 會指定列舉視為位字段,也就是一組旗標。 這些稱為 列舉。

當您使用 FlagsAttribute 屬性宣告列舉時,建議您針對值使用 2 的乘冪,也就是 1、2、4、8、16 等等。 我們也建議 「None」 是值為 0 的成員名稱。 如需其他指導方針,請參閱 FlagsAttributeEnum

範例 1

下列範例示範如何使用 Enum 語句。 請注意,成員稱為 EggSizeEnum.Medium,而不是。Medium

Public Class Egg
    Enum EggSizeEnum
        Jumbo
        ExtraLarge
        Large
        Medium
        Small
    End Enum

    Public Sub Poach()
        Dim size As EggSizeEnum

        size = EggSizeEnum.Medium
        ' Continue processing...
    End Sub
End Class

範例 2

下列範例中的 方法位於 類別之外 Egg 。 因此, EggSizeEnum 完全限定為 Egg.EggSizeEnum

Public Sub Scramble(ByVal size As Egg.EggSizeEnum)
    ' Process for the three largest sizes.
    ' Throw an exception for any other size.
    Select Case size
        Case Egg.EggSizeEnum.Jumbo
            ' Process.
        Case Egg.EggSizeEnum.ExtraLarge
            ' Process.
        Case Egg.EggSizeEnum.Large
            ' Process.
        Case Else
            Throw New ApplicationException("size is invalid: " & size.ToString)
    End Select
End Sub

範例 3

下列範例會 Enum 使用語句來定義一組相關的具名常數值。 在此情況下,這些值是您可以選擇為資料庫設計數據輸入表單的色彩。

Public Enum InterfaceColors
    MistyRose = &HE1E4FF&
    SlateGray = &H908070&
    DodgerBlue = &HFF901E&
    DeepSkyBlue = &HFFBF00&
    SpringGreen = &H7FFF00&
    ForestGreen = &H228B22&
    Goldenrod = &H20A5DA&
    Firebrick = &H2222B2&
End Enum

範例 4

下列範例顯示同時包含正數和負數的值。

Enum SecurityLevel
    IllegalEntry = -1
    MinimumSecurity = 0
    MaximumSecurity = 1
End Enum

範例 5

在下列範例中, As 子句是用來指定 datatype 列舉的 。

Public Enum MyEnum As Byte
    Zero
    One
    Two
End Enum

範例 6

下列範例示範如何使用位列舉。 您可以將多個值指派給位列舉的實例。 宣告 Enum 包含 FlagsAttribute 屬性,表示列舉可以視為一組旗標。

' Apply the Flags attribute, which allows an instance
' of the enumeration to have multiple values.
<Flags()> Public Enum FilePermissions As Integer
    None = 0
    Create = 1
    Read = 2
    Update = 4
    Delete = 8
End Enum

Public Sub ShowBitwiseEnum()

    ' Declare the non-exclusive enumeration object and
    ' set it to multiple values.
    Dim perm As FilePermissions
    perm = FilePermissions.Read Or FilePermissions.Update

    ' Show the values in the enumeration object.
    Console.WriteLine(perm.ToString)
    ' Output: Read, Update

    ' Show the total integer value of all values
    ' in the enumeration object.
    Console.WriteLine(CInt(perm))
    ' Output: 6

    ' Show whether the enumeration object contains
    ' the specified flag.
    Console.WriteLine(perm.HasFlag(FilePermissions.Update))
    ' Output: True
End Sub

範例 7

下列範例會逐一查看 列舉。 它會使用 GetNames 方法,從列舉擷取成員名稱的陣列,以及 GetValues 擷取成員值的陣列。

Enum EggSizeEnum
    Jumbo
    ExtraLarge
    Large
    Medium
    Small
End Enum

Public Sub Iterate()
    Dim names = [Enum].GetNames(GetType(EggSizeEnum))
    For Each name In names
        Console.Write(name & " ")
    Next
    Console.WriteLine()
    ' Output: Jumbo ExtraLarge Large Medium Small 

    Dim values = [Enum].GetValues(GetType(EggSizeEnum))
    For Each value In values
        Console.Write(value & " ")
    Next
    Console.WriteLine()
    ' Output: 0 1 2 3 4 
End Sub

另請參閱