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

C# 我需要一个解决方案来执行类型参数重载,c#,.net,vb.net,generics,overloading,C#,.net,Vb.net,Generics,Overloading,我需要类型参数重载,如下所示: 公共类映射(TKey,TValue) Public类映射(TKey作为IEquatable的,TKey的,TValue) 因此,我可以新映射(人类),编译器将自动将其与公共类映射(TKey,TValue)匹配,如果我新映射(字符串)编译器将自动将其与公共类映射(TKey作为IEquatable(TKey),TValue)(因为字符串是IEquatable(字符串)) 现在,我的解决方案是为类指定不同的名称,例如: 公共类映射(TKey,TValue) 公共类EqM

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

公共类映射(TKey,TValue)

Public类映射(TKey作为IEquatable的,TKey的,TValue)

因此,我可以
新映射(人类)
,编译器将自动将其与
公共类映射(TKey,TValue)
匹配,如果我
新映射(字符串)
编译器将自动将其与
公共类映射(TKey作为IEquatable(TKey),TValue)
(因为字符串是IEquatable(字符串))

现在,我的解决方案是为类指定不同的名称,例如:

公共类映射(TKey,TValue)

公共类EqMap(TKey作为IEquatable(TKey的),TValue)


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

对不起,我不会说VB。。。但在c#(你的标签上有)中,你想要的是

Map<TKey,TValue>
{
    // implementation
}
Map
{
//实施
}

Map
其中TKey:IEquatable
{
}

不幸的是,这不受支持,因为约束不是签名的一部分。您必须提供不同的签名,并且使用不同的名称(或者可能是名称空间)是最干净的解决方案。没有比您建议的更好的解决方案。就我个人而言,我更喜欢
equalablemap
而不是
EqMap
equalablemap
可以继承
Map
,如果
关系并且重用是有益的


Net不支持类重载,谁知道呢,可能是在.Net 5.0中。这会很有用。

@Jodrell编译器绝对可以选择。当您执行参数重载f(对象)和f(字符串)时,任何字符串不也是对象吗?这里的原则是一样的,以最合适的为例。我个人认为你的解决方案是明智的。如果这两个类在行为上不同,那么使用相同的名称听起来会引起混淆。我有两个不同的命名类,您可以随时让工厂或其他东西检查您的类型,以返回最合适的类。洒在一些继承或接口上,以确保它们都可以被视为相同的对象,并对您进行排序。@Pacerir,doh,这些是类。据我所知,.Net不支持类重载。你想要的是继承和(反向/反向)变异。正如Chris所说,这些类必须有不同的名称。@Chris完全正确。我现在的问题是,这两个类具有相似的特性behaviors@Jodrell不要删除你的评论!
Map<Tkey,TValue>
   where TKey: IEquatable
{

}