Constante dentro da classe
Pergunta
Eu tentei criar um vb scripts de classe com uma constante e tem 800A03EA erro.É um VBS bug?Não é uma OOP regra fundamental?
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
Solução
O documentação lista de todas as instruções que são permitidos no contexto das aulas. Const
não entre eles, então não é suportado.Você pode contornar o problema usando variáveis de membro privado que você inicializar durante a instanciação (por exemplo,no Class_Initialize
):
Class customer
Private MAX_LEN
Private Name
Private Sub Class_Initialize
MAX_LEN = 70
Name = ""
End Sub
...
End Class
Se as instâncias da classe deve expor esse valor, você pode implementá-lo como uma propriedade só de leitura:
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
No entanto, como Ekkehard.Horner apontou corretamente, o valor ainda pode ser alterado por objecto código interno.Se a imutabilidade é a principal exigência para esse valor que você deve implementá-lo como uma constante global.
Outras dicas
Eu concordo com o Ansgar Wiechers's responder, mas gostaria de propor uma outra opção.
Se imutabilidade é mais importante do que o desempenho, você pode colocar o valor diretamente em Obter e utilizar a propriedade para se referir ao valor, em vez de uma variável de nível de classe.
Class customer
'read-only property, so no "Property Let/Set"
Public Property Get MaxLength
MaxLength = 70
End Property
...
End Class
Uma variável Privada (talvez com um getter) dá-lhe um valor que é lido somente do lado de fora da classe, mas a classe código interno ainda pode alterar esse valor.
Então, usando um global Const (talvez com um 'namespace' parte do nome) pode ser uma melhor solução nos casos em que o constness é o mais importante.