Il seguente codice ha un metodo statico, Foo()
, chiamando un metodo di istanza, Bar()
:
public sealed class Example
{
int count;
public static void Foo( dynamic x )
{
Bar(x);
}
void Bar( dynamic x )
{
count++;
}
}
Si compila senza errori * ma genera un'eccezione del binder di runtime in fase di runtime. La rimozione del parametro dinamico a questi metodi causa un errore del compilatore, come previsto.
Allora perché avere un parametro dinamico consente di compilare il codice? Anche ReSharper non lo mostra come un errore.
Modifica 1: * in Visual Studio 2008
Modifica 2: aggiunta sealed
poiché è possibile che una sottoclasse possa contenere un Bar(...)
metodo statico . Anche la versione sigillata viene compilata quando non è possibile che un metodo diverso dal metodo dell'istanza possa essere chiamato in fase di esecuzione.
dynamic
meno che non sia davvero necessario.