2010-03-02 5 views
0

Je veux créer une implémentation de l'interface IDictionary (Of TKey, TValue) pour fournir une fonctionnalité d'encapsulation.Comment implémenter IDictionary (Of TKey, TValue) dans VB?

Public Class ExtendedDictionary(Of TKey, TValue) 
    Implements IDictionary(Of TKey, TValue) 

    Private _Dictionary As Dictionary(Of TKey, TValue) 

    Public Sub Add(ByVal key As TKey, ByVal value As T) Implements IDictionary(Of TKey, T).Add 
    'Impl Here' 
    End Sub 

End Class 

Lorsque je fais cela, il gémit à propos des méthodes que je n'ai pas implémentées. Quand je choisis d'implémenter les méthodes d'ICollection, les ICollection sont ajoutées mais ensuite j'obtiens toute une pile d'erreurs. Certains d'entre eux se plaignent de méthodes avec des signatures identiques. Par exemple:

Public ReadOnly Property IsReadOnly() As Boolean Implements ICollection(Of KeyValuePair(Of TKey, T)).IsReadOnly 
     Get 
      Return IsReadOnly 
     End Get 
    End Property 

Cette erreur est donc assez facile à résoudre. Changez juste le nom de la méthode parce que nous lui disons quelle méthode elle implémente donc le nom devrait être sans conséquence. Donc, je le change en quelque chose Lick CollectionIsReadOnly. Les problèmes plus difficiles sont comme ceux-ci:

ReadOnly Public Property Count() As Integer Implements ICollection(Of T).Count 
     Get 
      Return Count 
     End Get 
    End Property 

L'erreur est Interface « System.Collections.Generic.ICollection (Of T) est pas mis en œuvre par cette classe. Je ne suis pas sûr de savoir quoi faire de cette erreur. Je ne le comprends même pas vraiment. J'échange pour changer le (Of T) en (Of TValue) mais cela n'a pas aidé.

Répondre

2

La déclaration correcte est:

Public ReadOnly Property Count() As Integer Implements System.Collections.Generic.ICollection(Of System.Collections.Generic.KeyValuePair(Of TKey, TValue)).Count 
    Get 
     ' implementation here... 
    End Get 
    End Property 

IntelliSense peut vous aider à obtenir ces déclarations juste, mais il est assez squameuse. Commencez par écrire ceci:

Public Class ExtendedDictionary(Of TKey, TValue) 
End Class 

curseur et insérer cette ligne:

Implements IDictionary(Of TKey, TValue) 

Lorsque vous appuyez sur Entrée après la finale), puis l'IDE insère automatiquement toutes les méthodes et propriétés requises.

Questions connexes