繁体   English   中英

C#重载解析规则

[英]c# overload resolution rules

假设以下扩展方法:

public static string ToFooBarString(this object obj)
{
...
}

public static string ToFooBarString< T >(this IEnumerable< T > obj)
{
...
}

现在,我通过IEnumerable <T>接口的实现来称呼它,例如

Dictionary< int , string > f; // implements IEnumerable< KeyValuePair< int , string > >
f.ToFooBarString(); // <--- which one is called?

在这种情况下称为哪个?为什么?

编译器选择“最接近”相关类型的重载。 因此,它将选择第二个过载。 (当编译器无法解决问题时,它将抱怨它含糊不清。)

由于“对象”位于层次结构的顶部,因此将首先使用任何其他适用的重载。

更重要的是,可以通过测试以及阅读大量书籍,在线文章,文档,博客等内容来发现这一点。使用Google谷歌搜索应该比在这里发布更快。

第二种方法将被调用。 它基于以下类型的转换规则:

阅读C#语言规范中的重载分辨率 具体来说,您可以查看7.4.2.3 ,其中讨论了如何解决转换冲突。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM