在尝试为another SO question写一个优雅的答案时,我偶然发现了有关扩展方法的奇怪问题。
请考虑以下设置:
public class Foo
{
}
public static class Extensions
{
public static string ExtensionTest(this object o)
{
return "object overload called";
}
public static string ExtensionTest(this Foo f)
{
return "Foo overload called";
}
}
当我执行以下操作时:
object o = new Foo();
Console.WriteLine(o.ExtensionTest());
它输出object overload called
(而不是Foo overload called
)
if-else
或switch
ing类型)“强加”动态绑定?