C#泛型与具体实现

4
在C#中,是否可以创建一个通用方法并为给定类型添加具体实现?例如:
void Foo<T>(T value) { 
    //add generic implementation
}
void Foo<int>(int value) {
   //add implementation specific to int type
}

我已经放弃了我的答案,并投票关闭了问题,因为不清楚你在问什么。这似乎是一个XY问题 - Matías Fidemraizer
1个回答

7
在您的具体示例中,您不需要这样做。相反,您只需实现一个非泛型重载,因为编译器会更喜欢使用它而不是泛型版本。编译时类型用于分派对象:
void Foo<T>(T value) 
{ 
}

void Foo(int value) 
{
   // Will get preferred by the compiler when doing Foo(42)
}

然而,在一般情况下,这并不总是奏效的。如果你混入继承或类似的东西,你可能会得到意外的结果。例如,如果你有一个实现了IBar的Bar类:
void Foo<T>(T value) {}
void Foo(Bar value) {}

你可以通过以下方法进行调用:

IBar b = new Bar();
Foo(b); // Calls Foo<T>, since the type is IBar, not Bar

您可以通过动态调度来解决此问题:
public void Foo(dynamic value)
{
    // Dynamically dispatches to the right overload
    FooImpl(value);
}

private void FooImpl<T>(T value)
{
}
private void FooImpl(Bar value)
{
}

很好的回答,里德。 - xofz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接