Enum utasítás (Visual Basic)
Számbavételt deklarál, és meghatározza a tagok értékeit.
Syntax
[ <attributelist> ] [ accessmodifier ] [ Shadows ]
Enum enumerationname [ As datatype ]
memberlist
End Enum
Részek
attributelist
Opcionális. Az enumerálásra vonatkozó attribútumok listája. Az attribútumlistát szögletes zárójelek ("
<
" és ">
") közé kell foglalnia.Az FlagsAttribute attribútum azt jelzi, hogy az enumerálás egy példányának értéke több enumerálási tagot is tartalmazhat, és hogy minden tag egy bitmezőt jelöl az enumerálási értékben.
accessmodifier
Opcionális. Megadja, hogy milyen kód férhet hozzá ehhez az enumeráláshoz. A következők egyike lehet:
Shadows
Opcionális. Megadja, hogy ez a számbavétel egy azonos nevű programozási elemet vagy túlterhelt elemeket rejt el egy alaposztályban. Árnyékokat csak az enumeráláson adhat meg, egyik tagján sem.
enumerationname
Szükséges. Az enumerálás neve. Az érvényes nevekről további információt a Deklarált elemnevek című témakörben talál.
datatype
Opcionális. Az enumerálás adattípusa és annak összes tagja.
memberlist
Szükséges. A jelen utasításban deklarált tagállandók listája. Több tag jelenik meg az egyes forráskódsorokon.
Mindegyik
member
a következő szintaxist és részeket tartalmazza:[<attribute list>] member name [ = initializer ]
Rész Leírás membername
Szükséges. A tag neve. initializer
Opcionális. A fordításkor kiértékelt és ehhez a taghoz rendelt kifejezés. End
Enum
Leállítja a blokkot
Enum
.
Megjegyzések
Ha logikailag egymáshoz logikailag kapcsolódó változatlan értékkészlettel rendelkezik, enumerálással együtt definiálhatja őket. Ez értelmes neveket biztosít az enumerálásnak és a tagoknak, amelyek könnyebben megjegyezhetők, mint az értékük. Ezután a kód számos pontján használhatja az enumerálási tagokat.
Az enumerálások használatának előnyei a következők:
Csökkenti a számok transzponálásából vagy helytelen beírásából eredő hibákat.
Megkönnyíti az értékek módosítását a jövőben.
Megkönnyíti a kód olvasását, ami azt jelenti, hogy kevésbé valószínű, hogy hibák lépnek fel.
Biztosítja az előre kompatibilitást. Enumerálások használata esetén a kód kisebb valószínűséggel hiúsul meg, ha a jövőben valaki módosítja a tagneveknek megfelelő értékeket.
Az enumerálásnak neve, mögöttes adattípusa és tagkészlete van. Minden tag egy állandót jelöl.
Az osztály, a struktúra, a modul vagy a felület szintjén deklarált enumerálás bármely eljáráson kívül tag-enumerálás. A deklarált osztály, struktúra, modul vagy felület tagja.
A tag-enumerálások az osztályukon, struktúrájukon, moduljukon vagy interfészükön belül bárhonnan elérhetők. Az osztályon, struktúrán vagy modulon kívüli kódnak minősítenie kell egy tag enumerálásának nevét az adott osztály, struktúra vagy modul nevével. Elkerülheti, hogy teljesen minősített neveket használjon, ha egy Import utasítást ad hozzá a forrásfájlhoz.
A névtér szintjén deklarált enumerálás bármely osztályon, struktúrán, modulon vagy felületen kívül annak a névtérnek a tagja, amelyben megjelenik.
Az enumerálás deklarációs környezetének forrásfájlnak, névtérnek, osztálynak, struktúrának, modulnak vagy interfésznek kell lennie, és nem lehet eljárás. További információ: Deklarációs környezetek és alapértelmezett hozzáférési szintek.
Az attribútumokat az enumerálás egészére alkalmazhatja, a tagokra azonban külön-külön nem. Az attribútumok információkat adnak a szerelvény metaadataihoz.
Adattípus
Az Enum
utasítás deklarálhatja az enumerálás adattípusát. Minden tag az enumerálás adattípusát veszi fel. Megadhatja Byte
, Integer
, Long
, SByte
, Short
, UInteger
, , ULong
vagy UShort
.
Ha nem adja meg datatype
az enumerálást, minden tag a saját adattípusát initializer
veszi fel. Ha mindkettőt datatype
initializer
megadja, az adattípusnak initializer
konvertálhatónak datatype
kell lennie. Ha egyik sem datatype
initializer
jelenik meg, az adattípus alapértelmezés szerint a következő lesz Integer
: .
Tagok inicializálása
Az Enum
utasítás inicializálhatja a kijelölt tagok tartalmát a következőben memberlist
: . A taghoz rendelendő kifejezés megadására használható initializer
.
Ha nem ad meg initializer
tagot, akkor a Visual Basic nullára inicializálja azt (ha ez az első member
), memberlist
vagy egy, a közvetlenül megelőző member
értéknél nagyobb értékre.
Az egyes initializer
kifejezésekben megadott kifejezés lehet a konstansok, a már definiált egyéb állandók és a már definiált tagok számbavétele, beleértve a számbavétel egy korábbi tagját is. Ezeket az elemeket számtani és logikai operátorokkal kombinálhatja.
Nem használhat változókat vagy függvényeket a következőben initializer
: . Azonban használhat konverziós kulcsszavakat, például CByte
és CShort
. Használhatja azt is AscW
, ha állandóval String
vagy Char
argumentummal hívja meg, mivel ez a fordítási időpontban kiértékelhető.
Az enumerálások nem rendelkeznek lebegőpontos értékekkel. Ha egy taghoz lebegőpontos érték van rendelve, és Option Strict
be van állítva, fordítóhiba lép fel. Ha Option Strict
ki van kapcsolva, az érték automatikusan a Enum
típusra lesz konvertálva.
Ha egy tag értéke meghaladja az alapul szolgáló adattípus megengedett tartományát, vagy ha a mögöttes adattípus által megengedett maximális értékre inicializál egy tagot, a fordító hibát jelez.
Módosítók
Az osztály, a struktúra, a modul és a felülettagok számbavétele alapértelmezés szerint nyilvános hozzáférésre van kapcsolva. A hozzáférési szinteket a hozzáférési módosítókkal módosíthatja. A névtértagok enumerálása alapértelmezés szerint az ismerősök hozzáférése. A hozzáférési szinteket módosíthatja nyilvánosra, de nem privátra vagy védettre. További információ: Hozzáférési szintek a Visual Basicben.
Minden enumerálási tag rendelkezik nyilvános hozzáféréssel, és nem használhat rajtuk hozzáférési módosítókat. Ha azonban maga az enumerálás korlátozottabb hozzáférési szinttel rendelkezik, a megadott enumerálási hozzáférési szint elsőbbséget élvez.
Alapértelmezés szerint az összes enumerálás típus, a mezőik pedig állandók. Ezért a Shared
, Static
és ReadOnly
kulcsszavak nem használhatók enumerálás vagy annak tagjai deklarálásakor.
Több érték hozzárendelése
Az enumerálások általában kölcsönösen kizáró értékeket jelölnek. Az attribútum deklarációba való Enum
belevételével FlagsAttribute ehelyett több értéket is hozzárendelhet az enumerálás egy példányához. Az FlagsAttribute attribútum azt határozza meg, hogy az enumerálás bitmezőként, azaz jelölőkészletként legyen kezelve. Ezeket bitenkénti számbavételnek nevezzük.
Ha enumerálást deklarál az FlagsAttribute attribútum használatával, javasoljuk, hogy az értékekhez használja a 2,1, 2, 4, 8, 16 stb. hatványt. Azt is javasoljuk, hogy a "None" legyen annak a tagnak a neve, akinek az értéke 0. További útmutatásért lásd FlagsAttribute és Enum.
1. példa
Az alábbi példa az utasítás használatát Enum
mutatja be. Vegye figyelembe, hogy a tag neve EggSizeEnum.Medium
Medium
nem .
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. példa
Az alábbi példában szereplő metódus az osztályon kívül Egg
esik. EggSizeEnum
Ezért a teljes minősítése 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. példa
Az alábbi példa az Enum
utasítással definiálja az elnevezett állandó értékek kapcsolódó készletét. Ebben az esetben az értékek olyan színek, amelyeket az adatbázis adatbeviteli űrlapjainak tervezéséhez választhat.
Public Enum InterfaceColors
MistyRose = &HE1E4FF&
SlateGray = &H908070&
DodgerBlue = &HFF901E&
DeepSkyBlue = &HFFBF00&
SpringGreen = &H7FFF00&
ForestGreen = &H228B22&
Goldenrod = &H20A5DA&
Firebrick = &H2222B2&
End Enum
4. példa
Az alábbi példa pozitív és negatív számokat is tartalmazó értékeket mutat be.
Enum SecurityLevel
IllegalEntry = -1
MinimumSecurity = 0
MaximumSecurity = 1
End Enum
5. példa
Az alábbi példában egy As
záradékot használunk az datatype
enumerálás megadására.
Public Enum MyEnum As Byte
Zero
One
Two
End Enum
6. példa
Az alábbi példa bemutatja, hogyan használható bitenkénti számbavétel. Egy bitenkénti számbavétel egy példányához több érték is rendelhető. A Enum
deklaráció tartalmazza az FlagsAttribute attribútumot, amely azt jelzi, hogy az enumerálás jelölőkészletként kezelhető.
' 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. példa
Az alábbi példa egy enumeráláson keresztül iterál. A metódussal GetNames beolvas egy tagnevekből álló tömböt az enumerálásból, és GetValues beolvas egy tagértékekből álló tömböt.
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