属性像变量一样使用,即使它们像过程一样定义。您不能调用属性(关键字Call
仅适用于过程和功能)。相反,您可以像这样为它们赋值:
object.property = value
此外,VBScript只允许将一个值分配给属性。属性获取器和设置器的其他参数用于索引访问。这样定义的属性:
Property Let Foo(a, b, c)
必须使用这样的:
object.Foo(valueA, valueB) = valueC
从documentation引用:
[Public | Private] Property Let name ([arglist,] value)
[statements]
[Exit Property]
[statements]
End Property
[...]
arglist
表示传递给的参数的变量列表属性让过程调用时。逗号分隔多个参数。在的Property Let过程中的每个参数的名称必须相同,对应的参数在属性获取程序。另外,Property Let程序将总是比其相应的Property Get程序多一个参数。这个论点是分配给财产的价值。
如果您必须将多个值分配给一个属性,则需要将值包装在适当的数据结构(数组,字典,自定义对象等)中。例如:
Class ManageCheckFile
Private m_cfNames
Private m_cfPrefix
Private m_cfTypes
Private m_cfDate
Public Property Let Names(data)
m_cfPrefix = data("prefix")
m_cfTypes = data("types")
m_cfDate = data("date")
Dim i
ReDim m_cfNames(UBound(m_cfTypes))
For i = 0 To UBound(m_cfTypes)
m_cfNames(i) = m_cfPrefix & "-" & m_cfDate & "." & m_cfTypes(i)
Next
End Property
End Class
Set values = CreateObject("Scripting.Dictionary")
values.Add "prefix", "chkfile"
values.Add "types", Array("bucf", "id")
values.Add "date", "20150618"
Set CheckFile = New ManageCheckFile
CheckFile.Names = values
或者你用一个实际的方法用于填充多个成员变量:如果你把它的类的默认方法,并使其返回对象
Class ManageCheckFile
Private m_cfNames
Private m_cfPrefix
Private m_cfTypes
Private m_cfDate
Public Sub Names(prefix, types, date)
m_cfPrefix = prefix
m_cfTypes = types
m_cfDate = date
Dim i
ReDim m_cfNames(UBound(m_cfTypes))
For i = 0 To UBound(m_cfTypes)
m_cfNames(i) = m_cfPrefix & "-" & m_cfDate & "." & m_cfTypes(i)
Next
End Sub
End Class
Set CheckFile = New ManageCheckFile
CheckFile.Names "chkfile", Array("bucf", "id"), "20150618"
你可以(在某种程度上)初始化对象及其创建后:
Class ManageCheckFile
Private m_cfNames
Private m_cfPrefix
Private m_cfTypes
Private m_cfDate
Public Default Function Names(prefix, types, date)
m_cfPrefix = prefix
m_cfTypes = types
m_cfDate = date
Dim i
ReDim m_cfNames(UBound(m_cfTypes))
For i = 0 To UBound(m_cfTypes)
m_cfNames(i) = m_cfPrefix & "-" & m_cfDate & "." & m_cfTypes(i)
Next
Set Names = Me
End Function
End Class
Set CheckFile = (New ManageCheckFile)("chkfile", Array("bucf", "id"), "20150618")
另一种选择可能是使用prefix
和date
为arglis牛逼参数:
Class ManageCheckFile
Private m_cfNames
Private m_cfPrefix
Private m_cfTypes
Private m_cfDate
Public Property Let Names(prefix, date, types)
m_cfPrefix = prefix
m_cfDate = date
m_cfTypes = types
Dim i
ReDim m_cfNames(UBound(m_cfTypes))
For i = 0 To UBound(m_cfTypes)
m_cfNames(i) = m_cfPrefix & "-" & m_cfDate & "." & m_cfTypes(i)
Next
End Property
Public Property Get Names(prefix, date)
Names = m_cfNames
End Property
End Class
Set CheckFile = New ManageCheckFile
CheckFile.Names("chkfile", "20150618") = Array("bucf", "id")
然而,这并没有多大意义,除非prefix
和date
实际做指数东西,这似乎并没有在这里如此。用我从代码中看到的,我可能会去数据结构或默认的方法路线。
我不认为你可以'调用''属性'。看起来你真正想要的是一个'Sub',而不是'Property'。我会用'Public Sub SetNames(...)'去。 – haim770
好的,我想我现在明白了。您只能使用'Let' \'Set'将单个变量传递给属性,我应该使用'='来设置属性,而不是将它当作函数来处理。 –