Megosztás a következőn keresztül:


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, , ULongvagy UShort.

Ha nem adja meg datatype az enumerálást, minden tag a saját adattípusát initializerveszi fel. Ha mindkettőt datatype initializermegadja, az adattípusnak initializer konvertálhatónak datatypekell 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 ), 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ó 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.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

Lásd még