以下代码有一个静态方法
Foo()
调用一个实例方法Bar()
:public sealed class Example
{
int count;
public static void Foo( dynamic x )
{
Bar(x);
}
void Bar( dynamic x )
{
count++;
}
}
这段代码可以正常编译,但在运行时会生成一个运行时绑定异常。如果将这些方法的动态参数移除,会像预期的那样导致编译器错误。
那么为什么有动态参数会使代码可编译呢?ReSharper也没有显示它为错误。
Edit 1: *在Visual Studio 2008中
Edit 2: 添加了sealed
,因为子类可能包含静态的Bar(...)
方法。即使是被封闭的版本,在运行时也只会调用实例方法而不会调用其他任何方法,但它仍然可以编译。