В следующем коде есть статический метод 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если в этом нет необходимости.