2017-09-15 20 views
0

我想在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 

回答

4

不建议通过公开成员变量来公开成员变量。要公开一个字典,请正确包装它的属性和方法的属性和方法,以便在类的属性和方法中可以访问它们。

实施例允许添加,改变和删除键/值对,以及检查一个键的存在:

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

通过注释行去逐个:


Values = CreateObject("Scripting.Dictionary") 

将对象引用分配给变量时,需要使用Set语句。


Values().Add Name, Value 

您需要定义一个Property GetValues才能访问它。否则,它是只写属性。


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