views:

198

answers:

1

I want to create an implementation of the IDictionary(Of TKey, TValue) interface to provide some wrapper functionality.

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

When I do this it moans about the methods which I have not Implemented. When I select to implement methods of ICollection the ICollection are added but then I get a whole stack of errors. Some of them are complaining about methods with identical signatures. For example:

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

So that error I think is pretty easy to fix. Just change the name of the method because we tell it which method it implements so the name should be inconsequential. So I change it to something Lick CollectionIsReadOnly. The harder problems are like these:

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

The error is Interface 'System.Collections.Generic.ICollection(Of T) is not implemented by this class. I am not sure what to do about this error. I don't even really understand it. I trade to change the (Of T) to (Of TValue) but that didn't help.

+1  A: 

The proper declaration is:

  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 can help you get these declarations just right, but it is pretty flaky. Start out by writing this:

Public Class ExtendedDictionary(Of TKey, TValue)
End Class

Cursor up and insert this line:

Implements IDictionary(Of TKey, TValue)

When you press Enter after the final ) then the IDE will automatically insert all required methods and properties.

Hans Passant