如何在vbscript中的类中使用字典?
问题描述:
我想在vbscript中创建一个包含字典作为其成员变量之一的类,并为其Add方法创建一个简单的包装类。这真的非常糟糕。我已经评论了所有不工作的行。如何在vbscript中的类中使用字典?
Class ConfigSection
Private m_Name
' A dictionary of values to set {Section:{name:value, name2:value2}}
Private m_Values
Private m_Overwrite
Public Function init(p_Name, p_Overwrite)
Set init = Me
m_Name = p_name
m_Overwrite = p_Overwrite
'Values = CreateObject("Scripting.Dictionary")
End Function
Public Property Get Name
Name = m_Name
End Property
Public Property Get Overwrite
Overwrite = m_Overwrite
End Property
Public Sub Add(Name, Value)
'Values().Add Name, Value
End Sub
'Private Property Let Values(Value)
' Set m_Values = Value
'End Property
End Class
答
不建议通过公开成员变量来公开成员变量。要公开一个字典,请正确包装它的属性和方法的属性和方法,以便在类的属性和方法中可以访问它们。
实施例允许添加,改变和删除键/值对,以及检查一个键的存在:
Class Foo
Private d_
Private Sub Class_Initialize
Set d_ = CreateObject("Scripting.Dictionary")
End Sub
Public Property Let Item(name, value)
d_(name) = value
End Property
Public Property Get Item(name)
Item = d_(name)
End Property
Public Function Exists(name)
Exists = d_.Exists(name)
End Function
Public Sub Remove(name)
d_.Remove(name)
End Sub
End Class
Set obj = New Foo
WScript.Echo "" & obj.Exists("bar")
obj.Item("bar") = 42
WScript.Echo "" & obj.Exists("bar")
WScript.Echo obj.Item("bar")
obj.Remove("bar")
WScript.Echo "" & obj.Exists("bar")
答
通过注释行去逐个:
Values = CreateObject("Scripting.Dictionary")
将对象引用分配给变量时,需要使用Set
语句。
Values().Add Name, Value
您需要定义一个Property Get
为Values
才能访问它。否则,它是只写属性。
Private Property Let Values(Value)
Set m_Values = Value
End Property
由于此属性包含对象引用,您必须使用关键字Property Set
。
全部放在一起:
Class ConfigSection
Private m_Name
' A dictionary of values to set {Section:{name:value, name2:value2}}
Private m_Values
Private m_Overwrite
Public Function init(p_Name, p_Overwrite)
Set init = Me
m_Name = p_name
m_Overwrite = p_Overwrite
Set Values = CreateObject("Scripting.Dictionary")
End Function
Public Property Get Name
Name = m_Name
End Property
Public Property Get Overwrite
Overwrite = m_Overwrite
End Property
Public Sub Add(Name, Value)
Values().Add Name, Value
End Sub
Private Property Get Values
Set Values = m_Values
End Property
Private Property Set Values(Value)
Set m_Values = Value
End Property
End Class