【发布时间】:2012-07-16 17:15:37
【问题描述】:
不可能(除了使用不同的名称)有几个同名但实现不同接口的泛型方法吗?
public IList<T> List<T>() where T : class, IMyInterface1
{
return mylist
}
public IList<T> List<T>() where T : class, IMyInterface2
{
return mylist
}
谢谢,
【问题讨论】:
不可能(除了使用不同的名称)有几个同名但实现不同接口的泛型方法吗?
public IList<T> List<T>() where T : class, IMyInterface1
{
return mylist
}
public IList<T> List<T>() where T : class, IMyInterface2
{
return mylist
}
谢谢,
【问题讨论】:
不,您不能仅通过泛型类型约束来重载。您可以通过 number 个类型参数重载,但不能根据它们的约束。
如果您要实现一个接口,您可以使用显式接口实现——否则我建议您只使用不同的名称。老实说,我经常发现使用不同的名字会让事情更清楚。
请记住,您给出的示例无论如何都会引入自然歧义 - 如果类型参数实现 both 接口,您希望调用什么?
【讨论】:
T 并具有 where T: class 约束,另一个将返回 Nullable<T> 并具有 where T: struct 约束。所以有人可以传入int 或int? 的T 并调用正确的方法。也许我以错误的方式接近这个,但是能够使用应该是互斥的约束来专门化这个泛型会很有用。