C#的overload检查总是发生在编译时吗?

stackoverflow上有人问为什么下面的代码可以编译成功,但是运行时报错:

public sealed class Example
{
    int count;

    public static void Foo( dynamic x )
    {
        Bar(x);
    }

    void Bar( dynamic x )
    {
        count++;
    }
}
原因是C#如果参数中有dynamic,或者传进来的值是dynamic时,overload的检查发生在运行时,而不是编译时。MSDN上有详细的说明。
原文地址:https://www.cnblogs.com/fresky/p/2738808.html