Frage

Ich habe versucht, eine VB-Skriptklasse mit einer Konstante zu erstellen und habe den Fehler 800A03EA erhalten.Ist es ein VBS-Fehler?Ist das nicht eine OOP-Grundregel?

Class customer
   ' comment it const and its works
   const MAX_LEN=70

   Private Name

   Private Sub Class_Initialize
      Name = ""
   End Sub

   ' name property.
   Public Property Get getName
      getName = Name
   End Property

   Public Property Let letName(p_name)
      Name = p_name
   End Property
end class
War es hilfreich?

Lösung

Der Dokumentation listet alle Anweisungen auf, die im Kontext von Klassen zulässig sind. Const gehört nicht dazu und wird daher nicht unterstützt.Sie können das Problem umgehen, indem Sie private Mitgliedsvariablen verwenden, die Sie während der Instanziierung initialisieren (d. h.In Class_Initialize):

Class customer
  Private MAX_LEN
  Private Name

  Private Sub Class_Initialize
    MAX_LEN = 70
    Name = ""
  End Sub

  ...
End Class

Wenn Instanzen der Klasse diesen Wert verfügbar machen sollen, können Sie ihn als schreibgeschützte Eigenschaft implementieren:

Class customer
  Private MAX_LEN

  Private Sub Class_Initialize
    MAX_LEN = 70
  End Sub

  'read-only property, so no "Property Let/Set"
  Public Property Get MaxLength
    MaxLength = MAX_LEN
  End Property

  ...
End Class

Allerdings da Ekkehard.Horner Richtig darauf hingewiesen, könnte der Wert noch durch objektinternen Code geändert werden.Wenn Unveränderlichkeit die Hauptanforderung für diesen Wert ist, sollten Sie ihn als globale Konstante implementieren.

Andere Tipps

Ich stimme mit Ansgar Wiechers ist Antwort , möchte aber eine andere Option vorschlagen.

Wenn die Immutabilität wichtiger ist als die Leistung, können Sie den Wert direkt in die Get einlegen und die Eigenschaft verwenden, um auf den Wert anstelle einer Variablen der Klassenstufe zu verweisen.

generasacodicetagpre.

Eine private Variable (vielleicht mit einem Getter) gibt Ihnen einen Wert, der von außerhalb der Klasse nur schreibgeschützt ist. Der CLASS-Interne Code kann jedoch diesen Wert noch ändern.

also mit einem globalen const (vielleicht mit einem "Namespace" -Name-TEIL) eine bessere Problemumgehung in Fällen, in denen die Konstess am wichtigsten ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top