Le code suivant a une méthode statique, Foo()
appelant une méthode d'instance, Bar()
:
public sealed class Example
{
int count;
public static void Foo( dynamic x )
{
Bar(x);
}
void Bar( dynamic x )
{
count++;
}
}
Il se compile sans erreur * mais génère une exception de liant d'exécution lors de l'exécution. La suppression du paramètre dynamique de ces méthodes provoque une erreur du compilateur, comme prévu.
Alors, pourquoi avoir un paramètre dynamique permet-il de compiler le code? ReSharper ne l'affiche pas non plus comme une erreur.
Edit 1: * dans Visual Studio 2008
Edit 2: ajouté sealed
car il est possible qu'une sous-classe puisse contenir une Bar(...)
méthode statique . Même la version scellée se compile lorsqu'il n'est pas possible qu'une méthode autre que la méthode d'instance puisse être appelée au moment de l'exécution.
dynamic
sauf si vous en avez vraiment besoin.