【发布时间】:2025-11-23 14:25:01
【问题描述】:
假设我创建了一个泛型方法,并实现了一些类型,如下面的代码所示。
我还有两个对象,一个Foo 和一个Bar,其中Bar 继承自Foo。
然后我实现Foo 的通用方法。
如果我用Bar调用方法,为什么它没有碰到方法的Foo重载?
我测试了下面的代码,这就是它返回的内容。我更感兴趣的是为什么会发生这种情况。
我的问题是因为我想以相同的方式处理Bet 和Bar,所以方法的主体是相同的。虽然,如果不复制代码或创建另一个分派到正确的方法,我看不到如何做到这一点。
public class Foo
{
}
public class Bar : Foo
{
}
public class Bet : Foo
{
}
public static string Test<T>(T generic)
{
Console.WriteLine("T - generic overload");
return "Generic overload";
}
public static string Test(Foo foos)
{
Console.WriteLine("Foo - Foo overload");
return "Foo overload";
}
void Main()
{
Bar bar = new Bar();
Foo foo = new Foo();
Test(bar);
Test(foo);
}
Returns:
T - generic overload
Foo - Foo overload
【问题讨论】:
-
因为泛型方法创建了一个exact类型的新方法,所以它比父类型的方法更匹配
-
为什么会点击
List<object>?List<object>和List<int>不兼容。试试List<object> a = new List<int>();看看我的意思。 -
确实,使用
int和object是一个不好的例子。object不是int的父类型。即使是,List<object>也不是List<int>的父类型,它完全是一个不同的类型 -
实际演示该问题的示例是接受类型 A 和 B 的两个方法,其中 B 继承自 A:
Test<T>(T generic)和Test(A a)。即使这样,也会选择泛型方法,因为它与类型完全匹配。 -
谢谢大家,为误导性代码道歉 - 我修改了它以匹配问题
标签: c# overloading c#-5.0 generic-method