【问题标题】:Two generic methods with the same name两个同名的泛型方法
【发布时间】: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
}

谢谢,

【问题讨论】:

    标签: c# generics


    【解决方案1】:

    不,您不能仅通过泛型类型约束来重载。您可以通过 number 个类型参数重载,但不能根据它们的约束。

    如果您要实现一个接口,您可以使用显式接口实现——否则我建议您只使用不同的名称。老实说,我经常发现使用不同的名字会让事情更清楚。

    请记住,您给出的示例无论如何都会引入自然歧义 - 如果类型参数实现 both 接口,您希望调用什么?

    【讨论】:

    • 我预计会出现编译器错误。例如,我现在正在考虑使用两个同名的泛型方法,一个将返回 T 并具有 where T: class 约束,另一个将返回 Nullable&lt;T&gt; 并具有 where T: struct 约束。所以有人可以传入intint?T 并调用正确的方法。也许我以错误的方式接近这个,但是能够使用应该是互斥的约束来专门化这个泛型会很有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    相关资源
    最近更新 更多