В следующем коде есть статический метод 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(...)
. Даже закрытая версия компилируется, когда невозможно, чтобы во время выполнения можно было вызвать любой метод, отличный от метода экземпляра.