Как мне реализовать IDictionary (Of TKey, TValue) в VB? - PullRequest
0 голосов
/ 02 марта 2010

Я хочу создать реализацию интерфейса IDictionary (Of TKey, TValue), чтобы обеспечить некоторую функциональность оболочки.

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

Когда я делаю это, он стонет о методах, которые я не реализовал. Когда я выбираю реализацию методов ICollection, добавляются ICollection, но затем я получаю целый набор ошибок. Некоторые из них жалуются на методы с одинаковыми подписями. Например:

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

Так что эту ошибку, я думаю, довольно легко исправить. Просто измените имя метода, потому что мы сообщаем ему, какой метод он реализует, поэтому имя должно быть несущественным. Поэтому я изменяю это на что-то Lick CollectionIsReadOnly. Более сложные проблемы выглядят так:

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

Ошибка: интерфейс 'System.Collections.Generic.ICollection (Of T) не реализован этим классом. Я не уверен, что делать с этой ошибкой. Я даже не очень понимаю это. Я торгую, чтобы изменить (Of T) на (Of TValue), но это не помогло.

1 Ответ

2 голосов
/ 02 марта 2010

Правильная декларация:

  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 может помочь вам правильно понять эти декларации, но это довольно странно. Начните с написания этого:

Public Class ExtendedDictionary(Of TKey, TValue)
End Class

Наведите курсор и вставьте эту строку:

Implements IDictionary(Of TKey, TValue)

Когда вы нажимаете клавишу Enter после финальной версии), среда IDE автоматически вставит все необходимые методы и свойства.

...