El siguiente código tiene un método estático, Foo()
, llamando a un método de instancia, Bar()
:
public sealed class Example
{
int count;
public static void Foo( dynamic x )
{
Bar(x);
}
void Bar( dynamic x )
{
count++;
}
}
Se compila sin errores * pero genera una excepción de enlace en tiempo de ejecución en tiempo de ejecución. La eliminación del parámetro dinámico de estos métodos provoca un error del compilador, como se esperaba.
Entonces, ¿por qué tener un parámetro dinámico permite compilar el código? ReSharper tampoco lo muestra como un error.
Edición 1: * en Visual Studio 2008
Edición 2: agregada sealed
ya que es posible que una subclase pueda contener un Bar(...)
método estático . Incluso la versión sellada se compila cuando no es posible que se pueda llamar a otro método que no sea el método de instancia en tiempo de ejecución.
dynamic
menos que realmente lo necesite.