屬性像變量一樣使用,即使它們像過程一樣定義。您不能調用屬性(關鍵字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'將單個變量傳遞給屬性,我應該使用'='來設置屬性,而不是將它當作函數來處理。 –