[英]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谷歌搜索应该比在这里发布更快。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.