Constante à l'intérieur de la classe
Question
J'ai essayé de créer un vb scripts classe avec une constante et a obtenu 800A03EA erreur.C'est un VBS bug?N'est-il pas une règle fondamentale de la programmation orientée objet?
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
La solution
L' la documentation listes de toutes les déclarations qui sont autorisés dans le cadre de classes. Const
n'est pas parmi eux, de sorte qu'il n'est pas pris en charge.Vous pouvez contourner le problème en utilisant des variables de membre de l'initialisation lors de l'instanciation (c'est à diredans Class_Initialize
):
Class customer
Private MAX_LEN
Private Name
Private Sub Class_Initialize
MAX_LEN = 70
Name = ""
End Sub
...
End Class
Si les instances de la classe doit exposer cette valeur, vous pouvez l'appliquer comme une propriété en lecture seule:
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
Cependant, comme Ekkehard.Horner souligné correctement, la valeur peut encore être modifié par l'objet-code interne.Si l'immuabilité est la principale exigence pour cette valeur que vous devriez l'appliquer comme une constante globale.
Autres conseils
Je suis d'accord avec Ansgar Wiechers 's Répondre , mais souhaite proposer une autre option.
Si l'immuabilité est plus importante que la performance, vous pouvez mettre la valeur directement dans l'obtention et utiliser la propriété pour désigner la valeur au lieu d'une variable de niveau de classe.
Class customer
'read-only property, so no "Property Let/Set"
Public Property Get MaxLength
MaxLength = 70
End Property
...
End Class
Une variable privée (peut-être avec un getter) vous donne une valeur en lecture seule de l'extérieur de la classe, mais le code interne de classe peut toujours modifier cette valeur.
Ainsi, l'utilisation d'un const global (peut-être avec une partie de nom de noms de noms) peut être une meilleure solution de contournement dans les cas où la Constance est la plus importante.