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