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
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top