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