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