O código a seguir tem um método estático Foo()
, chamando um método de instância Bar()
:
public sealed class Example
{
int count;
public static void Foo( dynamic x )
{
Bar(x);
}
void Bar( dynamic x )
{
count++;
}
}
Ele compila sem erros * mas gera uma exceção de fichário de tempo de execução no tempo de execução. Remover o parâmetro dinâmico para esses métodos causa um erro do compilador, como esperado.
Então, por que ter um parâmetro dinâmico permite que o código seja compilado? O ReSharper também não mostra isso como um erro.
Edição 1: * no Visual Studio 2008
Edição 2: adicionada sealed
porque é possível que uma subclasse contenha um Bar(...)
método estático . Mesmo a versão selada compila quando não é possível que qualquer método diferente do método de instância possa ser chamado em tempo de execução.
dynamic
menos que seja realmente necessário.