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