内部不变的

gwa*_*rah 7 vbscript const class

我试图用常量创建一个vb脚本类,并且出现800A03EA错误.这是一个VBS错误?这不是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
Run Code Online (Sandbox Code Playgroud)

Ans*_*ers 13

文档列出了类上下文中允许的所有语句.Const不在其中,所以不支持.您可以使用在实例化期间初始化的私有成员变量(即in Class_Initialize)来解决此问题:

Class customer
  Private MAX_LEN
  Private Name

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

  ...
End Class
Run Code Online (Sandbox Code Playgroud)

如果类的实例应公开此值,则可以将其实现为只读属性:

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
Run Code Online (Sandbox Code Playgroud)

但是,正如Ekkehard.Horner正确指出的那样,对象内部代码仍然可以改变该值.如果不变性是该值的主要要求,则应将其实现为全局常量.

  • IMO,声明文档列出了可能出现在类中的所有语句,这是一个很大的延伸.我已经阅读了三次文档,但没有任何地方表明该列表是详尽无遗的.我认为更准确的说法是,微软通过省略而暗示了这一点.如果是这样,那么这就加入了一长串这样的遗漏.这就是为什么不应该让程序员编写自己的文档; 从中忽略重要的东西是非常容易的. (4认同)

Ril*_*jor 9

我同意Ansgar Wiechers回答,但我想提出另一个选择.

如果不变性比性能更重要,则可以将值直接放在Get中,并使用属性来引用值而不是类级变量.

Class customer

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

  ...
End Class
Run Code Online (Sandbox Code Playgroud)