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
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top