мне нужно решение, чтобы сделать перегрузку параметра типа - PullRequest
1 голос
/ 20 мая 2011

Мне нужна перегрузка параметра типа как таковая:

Public Class Map(Of TKey, TValue)

Public Class Map(Of TKey As IEquatable(Of TKey), TValue)

так что я могу New Map(Of Human), и компилятор автоматически сопоставит его с Public Class Map(Of TKey, TValue), а если i new Map(Of String), компилятор автоматически сопоставит его с Public Class Map(Of TKey As IEquatable(Of TKey), TValue) (поскольку String является IEquatable (Of String))

Сейчас мое решение состоит в том, чтобы дать классу разные имена как таковые:

Public Class Map(Of TKey, TValue)

Public Class EqMap(Of TKey As IEquatable(Of TKey), TValue)

Но я ищу лучшее решение

Ответы [ 2 ]

2 голосов
/ 20 мая 2011

Извините, я не говорю на VB ... но в c # (который у вас есть в ваших тегах) вы хотите

Map<TKey,TValue>
{
    // implementation
}

и

Map<Tkey,TValue>
   where TKey: IEquatable
{

}

к сожалению это не такне поддерживаются, поскольку ограничения не являются частью подписи, вам придется предоставлять разные подписи, а использование разных имен (или, возможно, пространств имен) является самым чистым решением IMO.

1 голос
/ 20 мая 2011

Нет решения лучше, чем вы предлагаете. Лично я предпочел бы от EquatableMap до EqMap, EquatableMap мог бы наследовать Map, если отношения is и повторное использование были бы полезными.

.Net не поддерживает перегрузку классов, кто знает, может быть, в .Net 5.0. Это было бы полезно.

...