繁体   English   中英

我需要一个解决方案来进行类型参数重载

[英]i need a solution to do type parameter overloading

我需要这样的类型参数重载:

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)

但我正在寻找更好的解决方案

抱歉,我不会说VB ...但是在C#中(您的标签中有),您想要的是

Map<TKey,TValue>
{
    // implementation
}

Map<Tkey,TValue>
   where TKey: IEquatable
{

}

不幸的是,不支持此方法,因为约束不是签名的一部分,您将必须提供不同的签名,并且使用不同的名称(或可能使用名称空间)是IMO的最简洁解决方案。

没有比您建议的更好的解决方案。 我个人更喜欢EquatableMapEqMap ,如果is关系和重用是有益的,则EquatableMap可以继承Map

.Net不支持类重载,谁知道呢,也许在.Net 5.0中。 这将是有用的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM