[英]How to initialize array property in a class in ASP classic?
How does one initialize an array property in a class? 如何在类中初始化数组属性? How to initialize array1 below:
下面如何初始化array1:
class Class1
private count
private array1
private sub class_initialize
count = 0
array1(0) = 0 'initialize first element
end sub
end class
Results in the error: Microsoft VBScript runtime error '800a000d' Type mismatch: 'array1' 错误结果:Microsoft VBScript运行时错误'800a000d'类型不匹配:'array1'
I figured it out: 我想到了:
class Class1
private count
private array1
private sub class_initialize
count = 0
array1 = array() 'initialize array property
end sub
'to add a new element to array property
public sub add(input)
redim preserve array1(count + 1)
array1(count) = input
count = count + 1
end sub
end class
Because reformed's class does not work correctly and ShadowWizards' comment is dangerous: 因为改革过的类不能正常工作,并且ShadowWizards的评论很危险:
Option Explicit
class ArrMemberA
private count
private array1
private sub class_initialize
count = 0
array1 = array() 'initialize array property
end sub
'to add a new element to array property
public sub add(input)
redim preserve array1(count + 1)
array1(count) = input
count = count + 1
end sub
Public Function toString()
toString = "[" & Join(array1, "*") & "]"
End Function
end class
Class ArrMemberB
Private m_a
Private Sub Class_Initialize
m_a = Array() ' initialize to empty dynamic array
End Sub
Public Sub add(input)
ReDim Preserve m_a(UBound(m_a) + 1)
m_a(UBound(m_a)) = input
End Sub
Public Function toString()
toString = "[" & Join(m_a, "*") & "]"
End Function
End Class
Class ArrMemberC
Private m_a()
Public Sub add(input)
ReDim Preserve m_a(UBound(m_a) + 1)
m_a(UBound(m_a)) = input
End Sub
Public Function toString()
toString = "[" & Join(m_a, "*") & "]"
End Function
End Class
Class ArrMemberD
Private m_a()
Private m_n
Private Sub Class_Initialize
m_n = -1 ' initialize to empty ubound
End Sub
Public Sub add(input)
m_n = m_n + 1
ReDim Preserve m_a(m_n)
m_a(m_n) = input
End Sub
Public Function toString()
toString = "[" & Join(m_a, "*") & "]"
End Function
End Class
Dim a : Set a = New ArrMemberA
a.add "zero"
a.add "one"
WScript.Echo "a:", a.toString(), "- spurious empty tail element"
Dim b : Set b = New ArrMemberB
b.add "zero"
b.add "one"
WScript.Echo "b:", b.toString()
Dim c : Set c = New ArrMemberC
On Error Resume Next
c.add "zero"
WScript.Echo "c:", Err.Description, "- Ubound() fails for the abomination created by 'Private m_a()'"
On Error GoTo 0
Dim d : Set d = New ArrMemberD
d.add "zero"
d.add "one"
WScript.Echo "d:", d.toString()
output: 输出:
cscript demoarray.vbs
a: [zero*one*] - spurious empty tail element
b: [zero*one]
c: Subscript out of range - Ubound() fails for the abomination created by 'Private m_a()'
d: [zero*one]
(a) shows that it is risky to roll your own counter; (a)表明开立自己的柜台是有风险的; (b) does it my way;
(b)以我的方式做到; (c) proves that the result of "Dim/Private/Public varname()" can't be UBound();
(c)证明“ Dim / Private / Public varname()”的结果不能为UBound(); (d) demonstrates that 'to make it work' you need the Class_Initialize sub you tried to avoid.
(d)演示了“使其工作”,您需要尝试避免的Class_Initialize子项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.