是否可以在 C# 中创建泛型方法并为给定类型添加具体实现?
例如:
void Foo<T>(T value) {
//add generic implementation
}
void Foo<int>(int value) {
//add implementation specific to int type
}
在您的具体示例中,您不需要这样做。相反,您只需实现非泛型重载,因为编译器会更喜欢使用它而不是泛型版本。编译时类型用于分派对象:
void Foo<T>(T value)
{
}
void Foo(int value)
{
// Will get preferred by the compiler when doing Foo(42)
}
然而,在一个一般情况,这并不总是有效。如果你混合继承或类似的东西,你可能会得到意想不到的结果。例如,如果您有一个Bar
实现的类IBar
:
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)
{
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)