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

发布于 2024-11-08 04:05:09 字数 622 浏览 1 评论 0 原文

我需要类型参数重载,如下所示:

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)

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

I need type parameter overloading as such:

Public Class Map(Of TKey, TValue)

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

so that i can New Map(Of Human) and the compiler will automatically match it to Public Class Map(Of TKey, TValue) and if i new Map(Of String) the compiler will automatically match it to Public Class Map(Of TKey As IEquatable(Of TKey), TValue) (since String is an IEquatable(Of String))

Right now my solution is to give the class different names as such:

Public Class Map(Of TKey, TValue)

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

But I'm looking for a better solution

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

丶情人眼里出诗心の 2024-11-15 04:05:09

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

Map<TKey,TValue>
{
    // implementation
}

Map<Tkey,TValue>
   where TKey: IEquatable
{

}

不幸的是,这不受支持,因为约束不是签名的一部分,您必须提供不同的签名并使用不同的签名在我看来,名称(或者可能是命名空间)是最干净的解决方案。

Sorry I don't speak VB... but in c# (which you have in your tags) what you want is

Map<TKey,TValue>
{
    // implementation
}

and

Map<Tkey,TValue>
   where TKey: IEquatable
{

}

unfortunately this isn't supported because constraints are not part of the signature you will have to provide different signatures and using different names (or possibly namespaces) is the cleanest solution IMO.

凶凌 2024-11-15 04:05:09

没有比你建议的更好的解决方案。就我个人而言,我更喜欢EquatableMap而不是EqMap,如果EquatableMap可以继承Map关系和重用是有益的。

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

There is no solution, better than what you propose. Personally I would prefer EquatableMap to EqMap, EquatableMap could inherit Map if the is relationship and reuse was beneficial.

.Net does not support class overloading, who knows, maybe in .Net 5.0. It would be useful.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文