题
我试图用常量创建一个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)为您提供一个值,该值从类外部只读,但类内部代码仍然可以更改该值。
所以,使用全局常数(可能是一个“命名空间”名称部分)在康复最重要的情况下可能是更好的解决方法。不隶属于 StackOverflow