我试图用常量创建一个VB脚本类,并获得800A03EA错误。这是一个vbs bug?不是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
.

有帮助吗?

解决方案

文档列出类中允许的所有语句。Const不是其中之一,所以它不受支持。您可以通过使用在实例化期间初始化的私有成员变量来解决问题(即,在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
. 但是,作为
ekkehard.horner 正确地指出,仍然可以通过对象内部代码更改该值。如果不可动态是此值的主要要求,您应该将其实施为全局常数。

其他提示

我同意 ansgar wiechers 's 答案,但想提出另一种选择。

如果不动态比性能更重要,您可以直接在GET中置于GET并使用该属性引用该值而不是类级变量。

Class customer

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

  ...
End Class
.

一个私有变量(或许有一个getter)为您提供一个值,该值从类外部只读,但类内部代码仍然可以更改该值。

所以,使用全局常数(可能是一个“命名空间”名称部分)在康复最重要的情况下可能是更好的解决方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top