API Basic Enum de - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

Enum / End Enum

ClassicUO • Basic

Enum fasst benannte Integer-Konstanten für Skriptzustände zusammen. Die Deklaration steht auf Datei- oder Module-Ebene, außerhalb von Sub/Function. Unterstützt wird eine Teilmenge von VB.NET, kein .NET-Enum-Objekt.

Genaue Syntax

[Public | Private] Enum name [As Integer]
    member [= constantExpression]
    ...
End Enum
Dim state As name = name.member
ModuleName.name.member

Parameter

  • Public / Private — Public ist der Standard, auch im Module. Private ist nur im Module zulässig und verbirgt Typ und Mitglieder vor anderen Modulen und der Dateiebene.
  • name — Ein einfacher Name ohne Punkte, etwa Mode; Großschreibung ist unerheblich. UO und eingebaute Typnamen sind reserviert. Der vollständige Name darf keinen Enum-, Module- oder globalen Variablennamen wiederholen.
  • As Integer — Optional; nur vorzeichenbehafteter 32-Bit-Integer, -2147483648..2147483647. Andere Basistypen werden abgelehnt. As Mode bei Variablen, Parametern oder Function-Ergebnissen verwendet normale Integer-Speicherung und Konvertierung; Werte müssen nicht in der Mitgliederliste stehen. Ohne Initialisierung gilt 0.
  • member — Ein einfacher Mitgliedsname je Zeile, mindestens einer. Doppelte Namen sowie True und False sind unzulässig. Ohne Ausdruck beginnt die Reihe bei 0 und erhöht den vorherigen Wert um 1. Verschiedene Namen dürfen denselben Wert haben.
  • constantExpression — Optionaler konstanter Ausdruck: dezimale/0x-Ganzzahlen, Klammern, unäres Minus, + - * / Mod, frühere Mitglieder und bereits deklarierte numerische Const. Endwerte müssen ganze Zahlen im Bereich sein; Zwischenquotienten dürfen Brüche sein. Referenzierte Const müssen ebenfalls Integer ergeben, untypisiert oder As Integer/Long/Short/Byte. Keine Aufrufe, Variablen, Strings, Vergleiche oder Arrayzugriffe. Vorwärtsverweise, Zyklen und Abhängigkeiten über 128 Ebenen werden abgelehnt.
  • name.member — Zugriff mit Mode.Ready, außerhalb des Moduls mit Tools.Mode.Ready. In Tools genügt Mode.Ready; With Mode erlaubt .Ready. Zuweisung, += und ByRef-Rückschreiben dürfen die Konstanten nicht ändern. Enum ist keine aufrufbare Funktion.

Rückgabewert

Die Deklaration liefert keinen Wert und braucht keine Aufrufklammern. Ein Mitglied liefert Integer, etwa Mode.Working = 3, keinen automatischen Erfolgsstatus. state = Mode.Finished ist dagegen ein Boolean-Vergleich: 1/True oder 0/False, beide Schreibweisen sind möglich. Der Zustandswert 0 kann Idle statt Fehler bedeuten.

Verhalten

  • EnumCatalog berechnet bei der Vorbereitung frühere Konstanten ohne Skript/API-Ausführung, vergibt automatische Werte und prüft Namen, Zugriff und Grenzen. SC026 blockiert den Start auch ohne Option Explicit. Syntaxfehler verhindern ebenfalls die Ausführung; unvollständige Eingaben liefern Diagnosen.
  • DefinitionCollector installiert konstante Mitglieder vor globalen Initialisierern und Optional-Standardwerten; diese dürfen später deklarierte Enums verwenden. Innerhalb eines Enum gelten weiterhin nur frühere Konstanten. Vorbereitete Skripte speichern den Katalog, ein neues Skript ersetzt ihn.
  • ScriptBindings löst Modulnamen und Private einmal auf. Ausführung liest Konstanten ohne Neuberechnung in Schleifen oder Reflection. As Mode wird Integer; der Debugger kann Integer anzeigen. Include darf Enums liefern. Keine Flags-Attribute, System.Enum-Methoden, impliziten Mitgliedimporte oder automatische Mitgliederliste.

Beispiele

1. Zustände benennen

# Idle=0 und Queued=1 entstehen automatisch. Working=10 setzt die Folge neu, Finished=11. state As TaskState erhält 10. Main liefert String "0:1:10:11"; CStr formatiert die Zahlen. Namen können an eigene Zustände angepasst werden, die Deklaration startet nichts.
Option Explicit On
Enum TaskState As Integer
    Idle
    Queued
    Working = 10
    Finished
End Enum

Sub Main()
    Dim state As TaskState = TaskState.Working
    Return CStr(TaskState.Idle) & ":" & CStr(TaskState.Queued) & ":" & CStr(state) & ":" & CStr(TaskState.Finished)
End Sub

Erläuterung der Parameter und Ausführung:

Idle=0 und Queued=1 entstehen automatisch. Working=10 setzt die Folge neu, Finished=11. state As TaskState erhält 10. Main liefert String "0:1:10:11"; CStr formatiert die Zahlen. Namen können an eigene Zustände angepasst werden, die Deklaration startet nichts.

2. Modulzustand verbergen

# Controller.Mode ist nur intern sichtbar. NextMode erhält distance ByVal As Integer, ohne das Aufrufargument zu ändern. distance<=1 wählt Arrived=5, sonst Walking=4; state beginnt bei 0. Main übergibt 3 und 1, erhält 4 und 5 und liefert Integer 45. Dies bewegt keinen Charakter; distance ist eine Beispieleingabe. Außen ist Controller.NextMode erlaubt, Controller.Mode.Arrived nicht.
Option Explicit On
Module Controller
    Private Enum Mode
        Idle
        Walking = 4
        Arrived
    End Enum

    Public Function NextMode(ByVal distance As Integer) As Integer
        Dim state As Mode
        If distance <= 1 Then
            state = Mode.Arrived
        Else
            state = Mode.Walking
        End If
        Return state
    End Function
End Module

Sub Main()
    Dim farState = Controller.NextMode(3)
    Dim nearState = Controller.NextMode(1)
    Return farState * 10 + nearState
End Sub

Erläuterung der Parameter und Ausführung:

Controller.Mode ist nur intern sichtbar. NextMode erhält distance ByVal As Integer, ohne das Aufrufargument zu ändern. distance<=1 wählt Arrived=5, sonst Walking=4; state beginnt bei 0. Main übergibt 3 und 1, erhält 4 und 5 und liefert Integer 45. Dies bewegt keinen Charakter; distance ist eine Beispieleingabe. Außen ist Controller.NextMode erlaubt, Controller.Mode.Arrived nicht.

3. Zustand wechseln und Boolean liefern

# Die frühere Integer-Const FirstState=2 ergibt Idle=2, Working=3, Finished=4. Advance verändert state in Main per ByRef; With Mode kürzt Namen ab, Select Case wählt den Übergang. Zwei Aufrufe ergeben 2→3→4. IsFinal erhält eine ByVal-Kopie und vergleicht mit Finished: Main liefert 1/True, nach nur einem Übergang wäre es 0/False. Ein weiterer Advance wirft "No next state"; Enum-Konstanten bleiben unverändert.
Option Explicit On
Const FirstState As Integer = 2
Enum Mode
    Idle = FirstState
    Working = Idle + 1
    Finished
End Enum

Sub Advance(ByRef state As Mode)
    With Mode
        Select Case state
            Case .Idle
                state = .Working
            Case .Working
                state = .Finished
            Case Else
                Throw "No next state"
        End Select
    End With
End Sub

Function IsFinal(ByVal state As Mode) As Boolean
    Return state = Mode.Finished
End Function

Sub Main()
    Dim state As Mode = Mode.Idle
    Advance(state)
    Advance(state)
    Return IsFinal(state)
End Sub

Erläuterung der Parameter und Ausführung:

Die frühere Integer-Const FirstState=2 ergibt Idle=2, Working=3, Finished=4. Advance verändert state in Main per ByRef; With Mode kürzt Namen ab, Select Case wählt den Übergang. Zwei Aufrufe ergeben 2→3→4. IsFinal erhält eine ByVal-Kopie und vergleicht mit Finished: Main liefert 1/True, nach nur einem Übergang wäre es 0/False. Ein weiterer Advance wirft "No next state"; Enum-Konstanten bleiben unverändert.


en · ru · uk · fr · de · it · es · zh-tw · ja · ko

Basic