2015-06-18 174 views
1

我有一个类的开始,它将被最终用来创建,检查和删除校验文件。不支持对象的类属性

下面的代码似乎是正确的基础上,我发现了资源,但是当我运行它,我提出了一个错误的4线 -

对象不支持此属性或方法:名称

什么我doning错在这里?

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 
+1

我不认为你可以'调用''属性'。看起来你真正想要的是一个'Sub',而不是'Property'。我会用'Public Sub SetNames(...)'去。 – haim770

+0

好的,我想我现在明白了。您只能使用'Let' \'Set'将单个变量传递给属性,我应该使用'='来设置属性,而不是将它当作函数来处理。 –

回答

0

属性像变量一样使用,即使它们像过程一样定义。您不能调用属性(关键字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") 

另一种选择可能是使用prefixdatearglis牛逼参数:

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") 

然而,这并没有多大意义,除非prefixdate实际做指数东西,这似乎并没有在这里如此。用我从代码中看到的,我可能会去数据结构或默认的方法路线。

相关问题