Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Számbavételt deklarál, és meghatározza a tagok értékeit.
Szemantika
[ <attributelist> ] [ accessmodifier ] [ Shadows ]
Enum enumerationname [ As datatype ]
memberlist
End Enum
Részek
attributelistOpcioná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.
accessmodifierOpcionális. Megadja, hogy milyen kód férhet hozzá ehhez az enumeráláshoz. A következők egyike lehet:
ShadowsOpcioná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.
enumerationnameSzü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.
datatypeOpcionális. Az enumerálás adattípusa és annak összes tagja.
memberlistSzü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
membera következő szintaxist és részeket tartalmazza:[<attribute list>] membername [ = initializer ]Rész Leírás membernameSzükséges. A tag neve. initializerOpcionális. A fordításkor kiértékelt és ehhez a taghoz rendelt kifejezés. EndEnumLeá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, , ULongvagy UShort.
Ha nem adja meg datatype az enumerálást, minden tag a saját adattípusát initializerveszi fel. Ha mindkettőt datatypeinitializermegadja, az adattípusnak initializer konvertálhatónak datatypekell lennie. Ha egyik sem datatypeinitializer 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 ), memberlistvagy 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ó FlagsAttribute belevételével Enum 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.MediumMediumnem .
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