Class 属性 对象不支持
Class property not supported by object
我有一个 Class 的开头,它最终将用于创建、检查和删除检查文件。
根据我找到的资源,下面的代码似乎是正确的,但是当我 运行 它时,我在第 4 行出现错误 -
Object doesn't support this property or method: 'Names'
我做错了什么?
Dim CheckFile
Set CheckFile = new ManageCheckFile
Call CheckFile.Names("chkfile", Array("bucf", "id"), "20150618")
Class ManageCheckFile
Private m_cfNames
Private m_cfPrefix
Private m_cfTypes
Private m_cfDate
'**
' Set the cfNames property
' Also set the cfPrefix, cfTypes and cfDate properties
'*
Public Property Let Names(prefix, types, date)
m_cfPrefix = prefix
m_cfTypes = types
m_cfDate = date
Dim i ' Dummy for looping
For i = 0 To UBound(m_cfTypes)
m_cfNames(i) = m_cfPrefix & "-" & m_cfDate & "." & m_cfTypes(i)
Next
End Property
End Class
对于您正在做的事情,函数可能比 Class 更好地为您提供服务。如果你想要 return 任何东西,你都不想使用 Sub。
https://msdn.microsoft.com/en-us/library/bx9ceb2w%28v=vs.84%29.aspx
属性的使用方式与变量类似,尽管它们的定义方式与过程类似。您不能调用属性(Call
关键字仅适用于过程和函数)。相反,您可以像这样给它们赋值:
object.property = value
此外,VBScript 只允许将单个值分配给 属性。 属性 getter 和 setter 的其他参数用于索引访问。一个 属性 定义如下:
Property Let Foo(a, b, c)
必须这样使用:
object.Foo(valueA, valueB) = valueC
[Public | Private] Property Let name ([arglist,] value)
[statements]
[Exit Property]
[statements]
End Property
[...]
arglist
List of variables representing arguments that are passed to the Property Let procedure when it is called. Commas separate multiple arguments. The name of each argument in a Property Let procedure must be the same as the corresponding argument in a Property Get procedure. In addition, the Property Let procedure will always have one more argument than its corresponding Property Get procedure. That argument is the value being assigned to the property.
如果您必须将多个值分配给一个 属性,您需要将这些值包装在适当的数据结构中(数组、字典、自定义对象等)。示例:
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 的默认方法并使其成为 return 对象,您可以(某种程度上)在对象创建后立即对其进行初始化:
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
作为 arglist 参数:
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
确实索引了一些东西,但这里似乎不是这种情况。根据我从您的代码中看到的内容,我可能会选择数据结构或默认方法路由。
我有一个 Class 的开头,它最终将用于创建、检查和删除检查文件。
根据我找到的资源,下面的代码似乎是正确的,但是当我 运行 它时,我在第 4 行出现错误 -
Object doesn't support this property or method: 'Names'
我做错了什么?
Dim CheckFile
Set CheckFile = new ManageCheckFile
Call CheckFile.Names("chkfile", Array("bucf", "id"), "20150618")
Class ManageCheckFile
Private m_cfNames
Private m_cfPrefix
Private m_cfTypes
Private m_cfDate
'**
' Set the cfNames property
' Also set the cfPrefix, cfTypes and cfDate properties
'*
Public Property Let Names(prefix, types, date)
m_cfPrefix = prefix
m_cfTypes = types
m_cfDate = date
Dim i ' Dummy for looping
For i = 0 To UBound(m_cfTypes)
m_cfNames(i) = m_cfPrefix & "-" & m_cfDate & "." & m_cfTypes(i)
Next
End Property
End Class
对于您正在做的事情,函数可能比 Class 更好地为您提供服务。如果你想要 return 任何东西,你都不想使用 Sub。 https://msdn.microsoft.com/en-us/library/bx9ceb2w%28v=vs.84%29.aspx
属性的使用方式与变量类似,尽管它们的定义方式与过程类似。您不能调用属性(Call
关键字仅适用于过程和函数)。相反,您可以像这样给它们赋值:
object.property = value
此外,VBScript 只允许将单个值分配给 属性。 属性 getter 和 setter 的其他参数用于索引访问。一个 属性 定义如下:
Property Let Foo(a, b, c)
必须这样使用:
object.Foo(valueA, valueB) = valueC
[Public | Private] Property Let name ([arglist,] value) [statements] [Exit Property] [statements] End Property
[...]
arglist
List of variables representing arguments that are passed to the Property Let procedure when it is called. Commas separate multiple arguments. The name of each argument in a Property Let procedure must be the same as the corresponding argument in a Property Get procedure. In addition, the Property Let procedure will always have one more argument than its corresponding Property Get procedure. That argument is the value being assigned to the property.
如果您必须将多个值分配给一个 属性,您需要将这些值包装在适当的数据结构中(数组、字典、自定义对象等)。示例:
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 的默认方法并使其成为 return 对象,您可以(某种程度上)在对象创建后立即对其进行初始化:
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
作为 arglist 参数:
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
确实索引了一些东西,但这里似乎不是这种情况。根据我从您的代码中看到的内容,我可能会选择数据结构或默认方法路由。