简体   繁体   中英

Implement scripting.dictionary item

I'm trying to create a class that inherits Scripting.Dictionnary to create hash tables with type restrictive keys and items.

The problem I encounter is that I don't find any documentation about how to implement this, and I have an error message telling me I must implement Item to interface dictionary.

Here is the prototype of my class :

Option Explicit
Implements Dictionary

Public Sub Add(nom As String, jour As Date, temps As Integer)
    Supplier.Add nom, Array(jour, temps)
End Sub

Public Property Get Item(Key As String) As Array
    Item = Supplier.Item(Key)
End Property

Public Property Set Item(Key As String, jour As Date, temps As Integer)
    Set Supplier.Item(Key) = Array(jour, temps)
End Property

How should I Implement Item to make it work ? And is this the good way to achieve what I want ?

Your stated goal is to implement a strongly-typed Dictionary. To accomplish this goal, I would not implement an Interface. Rather, I would wrap the Dictionary in a class and achieve the strong-typing by using another class:

Supplier Class

Option Explicit

Private Supplier As Dictionary

Private Sub Class_Initialize()
   Set Supplier = New Dictionary
End Sub

Public Sub Add(Key As String, Item As SupplierItem)
   Supplier.Add Key, Item
End Sub

Public Property Get Item(Key As String) As SupplierItem
   Set Item = Supplier.Item(Key)
End Property

Public Property Set Item(Key As String, Value As SupplierItem)
   Set Supplier.Item(Key) = Value
End Property

SupplierItem Class

Option Explicit

Public jour As Date
Public temps As Integer

Testing Logic

Option Explicit

Public Sub Test()
   Dim s As Supplier
   Dim si As SupplierItem
   
   Set s = New Supplier
   
   Set si = New SupplierItem
   si.jour = Now
   si.temps = 3
   s.Add "Key1", si
   Debug.Print s.Item("Key1").temps
   
   Set si = New SupplierItem
   si.jour = Now
   si.temps = 4
   Set s.Item("Key1") = si
   Debug.Print s.Item("Key1").temps
End Sub

You will need to implement all the functions/properties of what you are implementing.

Something like so

Option Explicit

Private d As Scripting.Dictionary

Implements Scripting.Dictionary

Public Sub Class_Initialize()
    Set d = New Scripting.Dictionary
End Sub

Public Property Set Dictionary_Item(Key As Variant, RHS As Variant)
    Set d.Item(Key) = RHS
End Property

Public Property Let Dictionary_Item(Key As Variant, RHS As Variant)
    d.Item(Key) = RHS
End Property

Public Property Get Dictionary_Item(Key As Variant) As Variant

End Property

Public Sub Dictionary_Add(Key As Variant, Item As Variant)

End Sub

Public Property Let Dictionary_CompareMode(ByVal RHS As Scripting.CompareMethod)

End Property

Public Property Get Dictionary_CompareMode() As Scripting.CompareMethod

End Property

Public Property Get Dictionary_Count() As Long

End Property

Public Function Dictionary_Exists(Key As Variant) As Boolean

End Function

Public Property Get Dictionary_HashVal(Key As Variant) As Variant

End Property

Public Function Dictionary_Items() As Variant

End Function

Public Property Let Dictionary_Key(Key As Variant, RHS As Variant)

End Property

Public Function Dictionary_Keys() As Variant

End Function

Public Sub Dictionary_Remove(Key As Variant)

End Sub

Public Sub Dictionary_RemoveAll()

End Sub

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM