Pregunta

He intentado crear una clase de Scripts VB con un error constante y obtuve 800A03EA.¿Es un error VBS?¿No es una regla fundamental de 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

¿Fue útil?

Solución

The Documentación Enumera todas las declaraciones que se permiten en el contexto de las clases.Const no está entre ellos, por lo que no es compatible.Puede trabajar alrededor del problema utilizando variables de miembro privado que inicializa durante la instanciación (es decir, en Class_Initialize):

Class customer
  Private MAX_LEN
  Private Name

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

  ...
End Class

Si las instancias de la clase deben exponer este valor, podría implementarlo como una propiedad de solo lectura:

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

Sin embargo, como ekkehard.horner señalado correctamente, el valor aún podría ser cambiado por el código interno del objeto.Si la inmutabilidad es el requisito principal para este valor, debe implementarlo como constante global.

Otros consejos

Estoy de acuerdo con ansgar wiechers 's Respuesta , pero me gustaría proponer otra opción.

Si la inmutabilidad es más importante que el rendimiento, podría poner el valor directamente en la entrada y usar la propiedad para consultar el valor en lugar de una variable de nivel de clase.

Class customer

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

  ...
End Class

Una variable privada (Tal vez con un Getter) le brinda un valor que se lea solo desde el exterior de la clase, pero el código interno de la clase todavía puede cambiar ese valor.

Por lo tanto, usar un Const Global (quizás con una parte de nombre "de" espacio de nombres ") puede ser una mejor solución en los casos en que el constness sea el más importante.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top