2015-06-18 163 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實際做指數東西,這似乎並沒有在這裏如此。用我從代碼中看到的,我可能會去數據結構或默認的方法路線。

相關問題