我需要类型参数重载:
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)
匹配,如果我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)
但我正在寻找更好的解决方案
答案 0 :(得分:2)
抱歉,我不会说VB ...但是在c#中(你的标签里有你想要的)
Map<TKey,TValue>
{
// implementation
}
和
Map<Tkey,TValue>
where TKey: IEquatable
{
}
遗憾的是,这不受支持,因为约束不是签名的一部分,您必须提供不同的签名,并且使用不同的名称(或可能是命名空间)是最简洁的解决方案IMO。
答案 1 :(得分:1)
没有解决方案,比你的建议更好。我个人希望EquatableMap
改为EqMap
,如果EquatableMap
关系和重用有益,Map
可以继承is
。
.Net不支持类重载,谁知道,也许在.Net 5.0中。这会很有用。