两个名称相同的通用方法

10
除非使用不同的名称,否则不可能有几个具有相同名称但实现不同接口的通用方法吗?
public IList<T> List<T>() where T : class, IMyInterface1
{

    return mylist
}

public IList<T> List<T>() where T : class, IMyInterface2
{

    return mylist
}

感谢您的选择,

1个回答

12

不可以单独通过泛型类型限制进行重载。你可以通过类型参数的数量进行重载,但不能基于它们的限制进行重载。

如果您正在实现接口,则可以使用显式接口实现;否则,建议使用不同的名称。老实说,我经常发现使用不同的名称可以使事情更加清晰。

请注意,您提供的示例本身就存在自然模棱两可的情况 - 如果类型参数同时实现了两个接口,您会期望调用哪一个方法呢?


1
我会期望编译器出现错误。例如,我正在考虑的是有两个同名的泛型方法,一个返回T并具有where T:class约束,另一个返回Nullable <T>并具有where T:struct约束。这样,某人可以传递intint?T并调用正确的方法。也许我走错了路,但使用应该是互斥的约束来专门化这个泛型将是有用的。 - Siddhartha Gandhi

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