Domanda

Ho provato a creare una classe di script VB con un errore costante e ottenuto 800A03EA.È un bug VBS?Non è una regola fondamentale 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
.

È stato utile?

Soluzione

the Documentazione Elenca tutte le dichiarazioni consentite nel contesto delle classi.Const non è tra questi, quindi non è supportato.È possibile lavorare attorno al problema utilizzando le variabili dei membri privati che si inizializzano durante l'istanziazione (cioè in Class_Initialize):

Class customer
  Private MAX_LEN
  Private Name

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

  ...
End Class
.

Se le istanze della classe dovrebbero esporre questo valore, è possibile implementarla come proprietà di sola lettura:

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
.

Tuttavia, come ekkehard.horner sottolineato correttamente, il valore potrebbe ancora essere modificato dal codice interno dell'oggetto.Se l'immutabilità è il requisito primario per questo valore è necessario implementarlo come costante globale.

Altri suggerimenti

Sono d'accordo con ansgar wiechers s Risposta , ma vorrebbe proporre un'altra opzione.

Se l'immutabilità è più importante delle prestazioni, è possibile inserire il valore direttamente nell'ottuale e utilizzare la proprietà per fare riferimento al valore invece di una variabile a livello di classe.

Class customer

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

  ...
End Class
.

Una variabile privata (forse con un getter) ti dà un valore che viene letto solo dall'esterno della classe, ma il codice interno della classe può ancora cambiare quel valore.

Quindi l'utilizzo di una cost globali (forse con una parte del nome di "namespace") può essere una soluzione migliore nei casi in cui la costlità è più importante.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top