Constante dentro de clase
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
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
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.