У наступному коді є статичний метод 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якщо вам це не потрібно.