Enum 陳述式 (Visual Basic)
更新:2007 年 11 月
宣告列舉型別並定義其成員值。
[ <attribute list> ] [ access modifier ] [ Shadows ] Enum enumeration name [ As data type ] member list End Enum
參數
attributelist
選擇項。套用至這個列舉型別的屬性 (Attribute) 清單。您必須將屬性清單置於角括弧中 ("<" 和 ">")。accessmodifier
選擇項。表示哪些程式碼可以存取這個列舉型別,可以是下列其中一項:您可以指定 ProtectedFriend 即可允許列舉型別的類別、衍生類別或相同組件內的程式碼存取列舉型別。
Shadows
選擇項。表示此列舉型別會重新宣告並隱藏基底類別中相同具名的程式設計項目,這個項目即為多載項目集。您只能針對列舉型別本身指定 Shadows,而不能針對它的任一成員指定這個項目。enumerationname
必要項。列舉型別的名稱。如需有效名稱的詳細資訊,請參閱宣告項目名稱。datatype
如果 OptionStrict 為 On,則為必要項。列舉型別及其所有成員的資料型別。memberlist
必要項。這個陳述式 (Statement) 中要宣告的成員常數清單。如果有多個成員時,成員要放在個別的原始程式碼行。每個 member 都具有下列語法和參數:[<attribute list>] member name [ = initializer ]
組成部分
描述
membername
必要項。這個成員的名稱。
initializer
選擇項。在編譯時期評估並指派給這個成員的運算式。
EndEnum
結束 Enum 區塊。
備註
如果有一組不會變動的值彼此間有邏輯上的相關性,您可以將它們一起定義在列舉型別中。這麼做可以為列舉型別及其成員提供有意義的名稱,而這些名稱會比它們原本的值更好記。然後,您就可以在程式碼中的許多地方使用這些列舉型別成員。因為所有相關的值都使用相同的列舉型別名稱,這也有助於提升程式碼的可讀性。
Enum 只能用於命名空間或模組層級。這表示列舉型別的「宣告內容」必須是原始程式檔 (Source File)、命名空間、類別、結構、模組或介面,而不能是程序。如需詳細資訊,請參閱宣告內容和預設存取層級。
Enum 陳述式可以宣告列舉型別的資料型別。每個成員都會採用列舉型別的資料型別。可以指定的型別有 Byte、Integer、Long、SByte、Short、UInteger、ULong 或 UShort。
如果沒有指定成員的 initializer,Visual Basic 會將其初始化成零 (如果它是 memberlist 中的第一個 member),或是比前一個緊鄰的 member 值大的值。
類別、結構、模組和介面的成員列舉型別預設為公用存取,您可以使用存取修飾詞調整存取層級。命名空間的成員列舉型別預設值為 friend 存取,您可以將其存取層級調整為 public,但不能為 private 或 protected。如需詳細資訊,請參閱 Visual Basic 中的存取層級。
**宣告內容。**在模組層級宣告的列舉型別 (不屬於任何程序) 即為「成員列舉型別」,而且屬於宣告它的類別、結構、模組或介面的成員。
在命名空間層級宣告的列舉型別 (不屬於任何類別、結構、模組或介面),只是其所在命名空間的成員。
**屬性。**屬性可以套用到整個列舉型別,但是無法單獨套用到列舉型別的成員。屬性會提供資訊給組件的中繼資料 (Metadata)。
**修飾詞。**根據預設,所有列舉型別都是型別,而其欄位都是常數。因此,在宣告列舉型別或其成員時,無法使用 Shared、Static 和 ReadOnly 關鍵字。
資料型別規則
**預設型別。**如果沒有為列舉型別指定 datatype,則每個成員都會採用其 initializer 的資料型別。如果同時指定 datatype 和 initializer,則 initializer 的資料型別必須可以轉換為 datatype。如果既不指定 datatype,也不指定 initializer,則資料型別會預設值為 Integer。
**初始設定。**Enum 陳述式可以初始化 memberlist 中選取成員的內容。您可以使用 initializer 提供要指派的運算式給成員。
每個 initializer 中提供的運算式,可以是常值 (Literal)、其他已經定義的常數,以及已經定義的列舉型別成員 (包含這個列舉型別中前面的成員) 的任何組合。您可以利用算術和邏輯運算子 (Logical Operator) 來結合這樣的項目。
在 initializer 中不能使用變數或函式。但是,您可以使用轉換關鍵字,例如 CByte 和 CShort。如果您使用常數 String 或 Char 引數來呼叫,也可以使用 AscW,因為可以在編譯時期進行評估。
行為
**存取層級。**所有的列舉型別成員都具有公用存取,但您無法針對它們使用任何的存取修飾詞。然而,如果列舉型別本身具有較嚴格的存取層級限制,則會優先採用指定的列舉型別存取層級。
**範圍。**成員列舉型別可以從其類別、結構、模組或介面內的任何地方進行存取,而命名空間的成員列舉型別則可以從該命名空間內的任何程式碼進行存取。
**限定性條件。**類別、結構或模組外的程式碼必須以該類別、結構或模組的名稱,限定成員列舉型別的名稱。
**無效值。**如果成員的值超出基礎資料型別所允許的範圍,或者如果將任何成員初始化為基礎資料型別所允許的最大值,編譯器便會報告錯誤。
「列舉型別變數」是宣告為 Enum 型別的變數。以這種方式宣告變數,有助於控制指派給該變數的值。然而,您也可以指派不是列舉型別成員的值,只要其資料型別可以轉換成列舉型別的資料型別。當列舉型別是旗標欄位,而您指派旗標組合給列舉型別變數時,這會相當有用。下列範例顯示如何將多個旗標指派給列舉型別變數。
Enum filePermissions
create = 1
read = 2
write = 4
delete = 8
End Enum
Dim file1Perm As filePermissions
file1Perm = filePermissions.create Or filePermissions.read
您必須使用列舉型別變數的名稱或是列舉型別名稱本身,將每一個參考限定為列舉型別成員。例如,在前述範例中,您可以將第一個成員當做 filePermissions.create 來參考,但是不能當做 create。
範例
下列範例使用 Enum 陳述式定義一組相關的具名常數值。在這個例子中,這些值代表您在設計資料庫的資料輸入表單時可以選擇的色彩。
Public Enum InterfaceColors
MistyRose = &HE1E4FF&
SlateGray = &H908070&
DodgerBlue = &HFF901E&
DeepSkyBlue = &HFFBF00&
SpringGreen = &H7FFF00&
ForestGreen = &H228B22&
Goldenrod = &H20A5DA&
Firebrick = &H2222B2&
End Enum
下列範例顯示同時包含正數和負數的一組值。
Enum SecurityLevel
IllegalEntry = -1
MinimumSecurity = 0
MaximumSecurity = 1
End Enum