Costante all'interno della classe
Domanda
Ho provato a creare una classe di script VB con un errore costante e ottenuto 800A03EA.È un bug VBS?Non è una regola fondamentale oop?
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
. Soluzione
the Documentazione Elenca tutte le dichiarazioni consentite nel contesto delle classi.Const
non è tra questi, quindi non è supportato.È possibile lavorare attorno al problema utilizzando le variabili dei membri privati che si inizializzano durante l'istanziazione (cioè in Class_Initialize
):
Class customer
Private MAX_LEN
Private Name
Private Sub Class_Initialize
MAX_LEN = 70
Name = ""
End Sub
...
End Class
.
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
.
Tuttavia, come ekkehard.horner sottolineato correttamente, il valore potrebbe ancora essere modificato dal codice interno dell'oggetto.Se l'immutabilità è il requisito primario per questo valore è necessario implementarlo come costante globale.
Altri suggerimenti
Sono d'accordo con ansgar wiechers s Risposta , ma vorrebbe proporre un'altra opzione.
Se l'immutabilità è più importante delle prestazioni, è possibile inserire il valore direttamente nell'ottuale e utilizzare la proprietà per fare riferimento al valore invece di una variabile a livello di classe.
Class customer
'read-only property, so no "Property Let/Set"
Public Property Get MaxLength
MaxLength = 70
End Property
...
End Class
. Una variabile privata (forse con un getter) ti dà un valore che viene letto solo dall'esterno della classe, ma il codice interno della classe può ancora cambiare quel valore.
Quindi l'utilizzo di una cost globali (forse con una parte del nome di "namespace") può essere una soluzione migliore nei casi in cui la costlità è più importante.